9

私は、ソーシャル メディアを使用して人々がより健康的な生活を送れるように支援するコーチ向けの Web サイトに取り組んでいます。現時点では、フロントエンドに AngularJS を使用した ExpressJS サーバーで OAuth を介して Twitter にアクセスする作業を行っています。

AngularJSの Web サイトから:

200 ~ 299 の応答ステータス コードは成功ステータスと見なされ、成功コールバックが呼び出されます。応答がリダイレクトの場合、XMLHttpRequest は透過的にそれに続くことに注意してください。つまり、そのような応答に対してエラー コールバックは呼び出されません。

私のサーバーの完全なコードは、github のweb.jstwitter.jsにありますが、これが呼び出し元です。

function LoginCtrl($scope, $http, $location) {
  $scope.welcome = 'Sign in with Twitter';
  $http.defaults.useXDomain = true;    
  $scope.submit = function() {    
    $http({method: 'GET', url: '/sessions/connect'}).
    success(function(data, status) {
        $scope.welcome = data;
    });
  };
}

これは web.js の呼び出し先です。

app.get('/sessions/connect', function(req, res){
  consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
    if (error) {
      res.send("Error getting OAuth request token : " + sys.inspect(error), 500);
    } else {  
      req.session.oauthRequestToken = oauthToken;
      req.session.oauthRequestTokenSecret = oauthTokenSecret;
      res.redirect("https://api.twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);      
    }
  });
});

私がチェックするとtcpdump(申し訳ありませんが私は古風です)、私は見る:

Connection:.keep-alive....Moved.Temporarily..Redirecting.to.https://api.twitter.com/oauth/authorize?oauth_token=***

もちろん、これは本当に素晴らしいこと/sessions/connectです。ブラウザでこのサーバーに手動でアクセスすると、実際に発生します。ただし、AngularJS を使用すると、ブラウザ画面は実際にはリダイレクトされません。なぜだめですか?

4

1 に答える 1

7

$httpページのコンテンツを取得します。ただし、promise で結果が返されます。要求しない限り、ページはまったく変更されません。thenハンドラーで、ページをリダイレクトするために何かを行うことができます。ここにそれを行う方法の例があります: Angular POST からの高速リダイレクトを処理する

于 2013-07-06T02:11:53.227 に答える