Communication côté client Angular+RESTful avec API pour l'authentification/le (re)routage
Ce sujet a été abordé dans différentes questions et dans différents tutoriels, mais toutes les ressources précédentes que j'ai rencontrées ne font pas le tour de la question.
En résumé, j'ai besoin de
- Connexion via POST à partir de
http://client.foo
ahttp://api.foo/login
- Disposer d'un état de l'interface graphique/du composant "connecté" pour l'utilisateur qui fournit une
logout
itinéraire - Pouvoir "mettre à jour" l'interface utilisateur lorsque l'utilisateur se déconnecte / se déconnecte. Cela a été le plus frustrant
- Sécuriser mes routes pour vérifier l'état d'authentification (si nécessaire) et rediriger l'utilisateur vers la page de connexion en conséquence.
Mes problèmes sont les suivants
- Chaque fois que je navigue vers une page différente, je dois faire l'appel à
api.foo/status
pour déterminer si l'utilisateur est connecté ou non. (ATM Je suis en train d'utiliser Express pour les routes) Cela provoque un hoquet car Angular détermine des choses commeng-show="user.is_authenticated"
-
Lorsque je réussis à me connecter ou à me déconnecter, je dois rafraîchir la page (je ne veux pas avoir à le faire) afin de remplir des éléments tels que
{{user.first_name}}
ou, en cas de déconnexion, vider cette valeur.// Sample response from
/status
if successful{ customer: {...}, is_authenticated: true, authentication_timeout: 1376959033, ... }
Ce que j'ai essayé
- http://witoldsz.github.io/angular-http-auth/ 1
- http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/ 2
-
https://github.com/mgonto/restangular (Sur ma vie, je n'ai pas réussi à trouver comment faire pour
POST
conpost data
et nonquery params
. Les docs n'ont rien donné à ce sujet.
Pourquoi j'ai l'impression de perdre la tête
- Il semble que tous les tutoriels s'appuient sur une base de données (Mongo, Couch, PHP+MySQL, etc.), mais aucun ne s'appuie uniquement sur la communication avec une API RESTful pour conserver les états de connexion. Une fois connecté, des POST/GET supplémentaires sont envoyés avec
withCredentials:true
donc ce n'est pas le problème - Je ne peux pas trouver d'exemples/tutoriels/positions qui font Angular+REST+Auth, sans langage backend.
Je ne suis pas trop fier
Certes, je suis novice en matière d'Angular, et je ne serais pas surpris si j'aborde cette question de manière ridicule ; je serais ravi que quelqu'un me suggère une alternative, même si elle est parfaite.
J'utilise Express
surtout parce que j'aime vraiment Jade
y Stylus
- Je ne suis pas marié à la Express
Je suis prêt à y renoncer si ce que je veux faire n'est possible qu'avec le routage d'Angular.
Merci d'avance pour toute aide que vous pourrez m'apporter. Et ne me demandez pas de chercher sur Google, car j'ai environ 26 pages de liens violets ;-)
1 Cette solution repose sur l'objet fantaisie $httpBackend d'Angular, et la façon de le faire communiquer avec un vrai serveur n'est pas claire.
2 C'est ce qui s'en rapprochait le plus, mais comme j'ai une API existante avec laquelle je dois m'authentifier, je ne pouvais pas utiliser la "stratégie locale" de Passeport, et il semblait que la stratégie locale n'était pas la bonne. fou pour écrire un service OAUTH... que j'étais le seul à vouloir utiliser.