2013-07-05 1 views
8

저는 소셜 미디어를 사용하여 사람들의 건강한 삶을 돕기 위해 코치 웹 사이트를 만들고 있습니다. 지금은 프론트 엔드에 AngularJS가있는 ExpressJS 서버에서 OAuth를 통해 Twitter에 액세스하는 중입니다. website of AngularJS에서AngularJS에서 http.get의 리디렉션을 따르는 방법은 무엇입니까?

:

성공 상태로 간주되며 성공 콜백이 호출되고 발생합니다 200과 299 사이의 응답 상태 코드입니다. 응답이 리다이렉트 인 경우, XMLHttpRequest는 그것을 투명하게 따르므로, 응답 콜백은 그러한 응답을 위해 호출되지 않는다는 것을 의미한다.

내 서버의 전체 코드는 web.js와 GitHub의에 twitter.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에서는 브라우저 화면이 실제로 리디렉션되지 않습니다. 왜 안돼?

답변

6

$http 페이지 내용이 표시됩니다. 그러나 약속 한 결과를 돌려줍니다. 요청하지 않으면 페이지가 전혀 변경되지 않습니다. then 처리기에서 페이지를 리디렉션 할 수 있습니다. 여기에 어떻게 할 수있는 지에 대한 예가 있습니다 : Handle an express redirect from Angular POST

+0

그러나'res.send ("https : //"로 리디렉션 제안) '을 사용하면 트위터 페이지로 리디렉션됩니다. 거기에서 내 서버의 무언가 ('/ sessions/callback' 경로)가 호출 될 것이고, AngularJS 컨트롤러에서 그 콜백에 대한 응답 객체를 얻을 수 없을 것입니다. AngularJS와 함께 서버에서 'oauth'를 사용하고 있습니까? –

+0

@ondervloei Twitter는 웹 사이트에서 OAuth 프로세스를 철자합니다. https://dev.twitter.com/docs/auth/implementing-sign-twitter 브라우저를 Twitter로 리디렉션하면 Twitter가 서버로 다시 리디렉션됩니다. 토큰과. 그런 다음 토큰을 서버에서 Angular로 다시 전달할 수 있습니다. 페이지를 계속 유지하려면 새 창을 열 수 있습니다. –

+0

C++에서 oauth를 구현했습니다. 죄송합니다. 여기에 필요한 서버 측 코드와 클라이언트 측 코드 간의 상호 작용에는별로 경험이 없습니다. 나는 AngularJS를 사용하여 클라이언트 측에서 라우트를 설정함으로써 일반 체계를 알아 냈다고 생각합니다. 이 수수께끼에 상당 부분이 있으며이 웹 사이트를 방문하면 내가 그들을 방문하지 않는다고 추측합니다. :-) –

관련 문제