Comment suivre une redirection http.obtenir dans AngularJS?
Je suis en train de travailler sur un site web pour les entraîneurs pour aider les gens à avoir une vie plus saine en utilisant les médias sociaux. Sur le moment, je travaille sur l'accès à Twitter via OAuth dans un ExpressJS serveur avec AngularJS dans le frontend.
De la site web de AngularJS:
Un code d'état de réponse entre 200 et 299 est considéré comme un état de réussite, le succès de callback qui est appelée. Notez que si la réponse est une redirection, XMLHttpRequest de manière transparente le suivre, ce qui signifie que l'erreur de rappel ne sera pas appelé pour ces réponses.
Le code complet de mon serveur peut être trouvé dans web.js et twitter.js sur github, mais c'est l'appelant:
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;
});
};
}
Et c'est le destinataire de l'appel à 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);
}
});
});
Si je vérifie avec tcpdump
(désolé, je suis à l'ancienne) je vois:
Connection:.keep-alive....Moved.Temporarily..Redirecting.to.https://api.twitter.com/oauth/authorize?oauth_token=***
C'est vraiment gentil, bien sûr, et d'ailleurs le cas quand je vais à ce serveur /sessions/connect
manuellement dans le navigateur. Cependant, avec AngularJS l'écran de mon navigateur n'est pas réellement redirigés. Pourquoi pas?
OriginalL'auteur Anne van Rossum | 2013-07-05
Vous devez vous connecter pour publier un commentaire.
$http
va et reçoit le contenu de la page pour vous. Cependant, il vous donne les résultats dans la promesse. Il n'est pas de changer votre page à tous sauf si vous le demandez. Dans votrethen
gestionnaire, vous pouvez faire quelque chose pour rediriger votre page. Il y a un exemple de comment vous pouvez le faire ici: Poignée expresse de l'une redirection à partir du Angulaire POSTres.send("redirection suggestion to https://")
je vais me rediriger vers la page twitter. À partir de là, quelque chose sur mon serveur sera appelé (la route/sessions/callback
), et je ne vais pas être en mesure d'obtenir l'objet de la réponse à ce rappel à la AngularJS contrôleur n'est-ce pas? Est l'aide deoauth
sur le serveur avec AngularJS peut-être pas possible?Twitter précise le processus d'authentification OAuth sur leur site: dev.twitter.com/docs/auth/implementing-sign-twitter Vous êtes à rediriger le navigateur de Twitter, Twitter et la redirection se fera vers votre serveur avec le jeton. Vous pouvez ensuite passer le jeton de retour Angulaire de votre serveur. Si vous voulez garder votre page, vous pouvez ouvrir une nouvelle fenêtre.
J'ai mis en place le protocole oauth avant en C++. Désolé, je ne suis pas tellement d'expérience dans les interactions entre côté serveur et côté client, le code nécessaire ici. Je crois que j'ai compris le régime général, cependant, à savoir par la mise en place d'itinéraires sur le côté client avec AngularJS. Il y a bien des pièces de ce puzzle et qui me renvoie à ces sites web suppose que je n'ai pas les visiter. 🙂
Je vois. Vous avez besoin du navigateur pour être redirigé vers Twitter pour OAuth pour travailler. Sinon, Twitter ne peut pas être sûr que les informations d'identification utilisateur sont protégés. Vous pourriez peut-être utiliser un iframe. Le point de l'ensemble est de donner à Twitter contrôle absolu de sorte qu'ils peuvent autoriser l'utilisateur.
désolé mais cela ne fonctionne pas. Angulaire récupère la redirection de la page avant de pouvoir émettre une redirection vers le user-agent.
OriginalL'auteur John Tseng