2013-07-05 26 views
8

Tôi đang làm việc trên một trang web cho huấn luyện viên để giúp mọi người có cuộc sống khỏe mạnh hơn bằng cách sử dụng phương tiện truyền thông xã hội. Vào lúc này, tôi đang làm việc để truy cập vào Twitter thông qua OAuth trong một máy chủ ExpressJS với AngularJS trong giao diện người dùng.Làm cách nào để theo dõi chuyển hướng trong http.get trong AngularJS?

Từ website of AngularJS:

Một mã trạng thái phản ứng giữa 200 và 299 được coi là một trạng thái thành công và sẽ dẫn đến việc gọi lại thành công được gọi. Lưu ý rằng nếu đáp ứng là một chuyển hướng, XMLHttpRequest sẽ theo dõi một cách minh bạch nó, có nghĩa là lỗi gọi lại sẽ không được gọi cho các phản hồi như vậy.

Mã đầy đủ các máy chủ của tôi có thể được tìm thấy trong web.jstwitter.js trên github, nhưng đây là người gọi:

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; 
    }); 
    }; 
} 

Và đây là callee trong 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);  
    } 
    }); 
}); 

Nếu tôi kiểm tra với tcpdump (xin lỗi tôi đã lỗi thời) Tôi thấy:

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

Điều này thực sự tốt đẹp tất nhiên, và thực sự xảy ra khi tôi truy cập máy chủ này /sessions/connect theo cách thủ công trong trình duyệt. Tuy nhiên, với AngularJS màn hình trình duyệt của tôi không thực sự được chuyển hướng. Tại sao không?

Trả lời

6

$http truy cập và nhận nội dung của trang cho bạn. Tuy nhiên, nó mang lại cho bạn kết quả trong lời hứa. Nó không thay đổi trang của bạn, trừ khi bạn yêu cầu nó. Trong trình xử lý then, bạn có thể làm điều gì đó để chuyển hướng trang của mình. Có một ví dụ về cách bạn có thể làm điều đó tại đây: Handle an express redirect from Angular POST

+0

Nhưng nếu tôi sử dụng 'res.send (" đề xuất chuyển hướng tới https: // ")' Tôi sẽ chuyển hướng bản thân mình đến trang twitter. Từ đó một cái gì đó trên máy chủ của tôi sẽ được gọi (route '/ sessions/callback'), và tôi sẽ không thể lấy đối tượng phản hồi cho cuộc gọi lại đó trong bộ điều khiển AngularJS phải không? Việc sử dụng 'oauth' trên máy chủ cùng với AngularJS có lẽ không khả thi? –

+0

@ondervloei Twitter giải thích quy trình OAuth trên trang web của họ: https://dev.twitter.com/docs/auth/implementing-sign-twitter Bạn đang chuyển hướng trình duyệt tới Twitter và Twitter sẽ chuyển hướng trở lại máy chủ của bạn với mã thông báo. Sau đó, bạn có thể chuyển mã thông báo về Angular từ máy chủ của mình. Nếu bạn muốn giữ trang của mình ở đó, bạn có thể mở một cửa sổ mới. –

+0

Tôi đã triển khai oauth trước trong C++. Rất tiếc, tôi không có kinh nghiệm về tương tác giữa mã phía máy chủ và mã phía máy khách như được yêu cầu tại đây. Tôi nghĩ rằng tôi đã tìm ra các đề án chung mặc dù, cụ thể là bằng cách thiết lập các tuyến đường ở phía khách hàng với AngularJS. Có khá nhiều phần cho câu đố này và giới thiệu tôi đến các trang web này giả định tôi đã không ghé thăm chúng. :-) –

Các vấn đề liên quan