Pracuję nad stroną internetową dla trenerów, która pomaga ludziom mieć zdrowsze życie dzięki wykorzystaniu mediów społecznościowych. W tej chwili pracuję nad dostępem do Twittera przez OAuth na serwerze ExpressJS z AngularJS w interfejsie.Jak wykonać przekierowanie w http.get w AngularJS?
Odpowiedź Kod stanu pomiędzy 200 a 299 jest uważany za stan sukcesem i spowoduje wywołanie zwrotne sukces miano. Zauważ, że jeśli odpowiedź jest przekierowaniem, XMLHttpRequest będzie ją transparentnie śledzić, co oznacza, że wywołanie błędu nie będzie wywoływane dla takich odpowiedzi.
pełny kod mojego serwera można znaleźć w web.js i twitter.js na github, ale to rozmówca:
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;
});
};
}
I to jest wywoływany w 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);
}
});
});
Jeśli sprawdzę z tcpdump
(przepraszam, jestem staromodny), widzę:
Connection:.keep-alive....Moved.Temporarily..Redirecting.to.https://api.twitter.com/oauth/authorize?oauth_token=***
To naprawdę fajne, i rzeczywiście dzieje się, gdy ręcznie przejdę do tego serwera /sessions/connect
w przeglądarce. Jednak w AngularJS mój ekran przeglądarki nie jest faktycznie przekierowywany. Dlaczego nie?
Ale jeśli użyję 'res.send (" sugestia przekierowania do https: // ")' przekieruję się do strony twitter. Z tego miejsca zostanie wywołane coś na moim serwerze (trasa '/ sessions/callback'), a nie będę w stanie uzyskać obiektu odpowiedzi na to wywołanie zwrotne w kontrolerze AngularJS, nieprawdaż? Czy użycie 'oauth' na serwerze razem z AngularJS może nie jest możliwe? –
@ondervloei Twitter określa proces OAuth na swojej stronie: https://dev.twitter.com/docs/auth/implementing-sign-twitter Masz przekierować przeglądarkę na Twitter, a Twitter przekieruje z powrotem na twój serwer z tokenem. Następnie możesz przekazać token z powrotem do Angular z twojego serwera. Jeśli chcesz zachować swoją stronę, możesz otworzyć nowe okno. –
Zaimplementowałam oauth wcześniej w C++. Niestety, nie jestem tak doświadczony w interakcjach między kodem po stronie serwera i strony klienta, jak jest to wymagane tutaj. Myślę, że wymyśliłem ogólny schemat, a mianowicie poprzez ustawienie tras po stronie klienta z AngularJS. Kawałek do tej układanki jest całkiem sporo, a odesłanie mnie do tych stron zakłada, że ich nie odwiedziłem. :-) –