2013-07-05 9 views
8

Sto lavorando a un sito Web per gli allenatori per aiutare le persone a vivere in modo più sano utilizzando i social media. Nel momento in cui sto lavorando all'accesso a Twitter tramite OAuth in un server ExpressJS con AngularJS nel frontend.Come seguire un reindirizzamento in http.get in AngularJS?

Dal website of AngularJS:

Un codice di stato di risposta tra 200 e 299 è considerato uno stato di successo e si tradurrà in callback successo chiamato. Si noti che se la risposta è un reindirizzamento, XMLHttpRequest lo seguirà in modo trasparente, il che significa che la richiamata di errore non verrà chiamata per tali risposte.

Il codice completo del mio server può essere trovato in web.js e twitter.js su GitHub, ma questo è il chiamante:

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

E questo è il chiamato in 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);  
    } 
    }); 
}); 

Se controllo con tcpdump (scusate il vecchio stile) vedo:

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

Questo è davvero bello, naturalmente, e infatti accade quando vado a questo server /sessions/connect manualmente nel browser. Tuttavia, con AngularJS lo schermo del mio browser non viene effettivamente reindirizzato. Perchè no?

risposta

6

$http va e ottiene il contenuto della pagina per voi. Tuttavia, ti restituisce i risultati nella promessa. Non cambia la tua pagina a meno che tu non lo chieda. Nel tuo gestore then, puoi fare qualcosa per reindirizzare la tua pagina. C'è un esempio di come puoi farlo qui: Handle an express redirect from Angular POST

+0

Ma se uso 'res.send (" suggerimento di reindirizzamento a https: // ")' Mi reindirizzerò alla pagina di Twitter. Da lì verrà chiamato qualcosa sul mio server (il percorso '/ sessions/callback'), e non sarò in grado di ottenere l'oggetto risposta a tale callback nel controller AngularJS, vero? L'uso di 'oauth' sul server con AngularJS non è forse possibile? –

+0

@ondervloei Twitter spiega il processo OAuth sul loro sito Web: https://dev.twitter.com/docs/auth/implementing-sign-twitter Devi reindirizzare il browser a Twitter e Twitter reindirizzare nuovamente al tuo server con il token. È quindi possibile passare il token a Angular dal proprio server. Se vuoi mantenere la tua pagina lì, puoi aprire una nuova finestra. –

+0

Ho implementato oauth prima in C++. Spiacente, non sono così esperto nelle interazioni tra il lato server e il codice lato client come richiesto qui. Penso di aver capito lo schema generale, cioè impostando i percorsi sul lato client con AngularJS. Ci sono alcuni pezzi in questo puzzle e riferirmi a questi siti web presume che non li abbia visitati. :-) –

Problemi correlati