2013-07-05 14 views
8

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?

Z website of 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?

Odpowiedz

6

$http idzie i pobiera zawartość strony za Ciebie. Jednak daje wyniki z powrotem w obietnicy. Nie zmienia to wcale twojej strony, chyba że o to poprosisz. W twoim handler'cie then możesz zrobić coś, aby przekierować swoją stronę. Oto przykład, jak możesz to zrobić: Handle an express redirect from Angular POST

+0

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? –

+0

@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. –

+0

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. :-) –

Powiązane problemy