48 votes

Les meilleures pratiques d'authentification Ember?

Quelqu'un aurait-il l'expérience de la création d'un mécanisme d'authentification avec le nouveau routeur dans pre4?

Voici quelques unes de mes réflexions à ce jour:

  • Afin de séparer complètement la vue (Braise app) à partir du serveur (application Rails) je veux utiliser l'authentification par jeton. Je vais probablement utiliser Concevoir sur le serveur Rails.
  • J'ai besoin de quelque chose comme un before_filter équivalent dans la Braise à l'application, où je peux vérifier si il y a un courant de l'utilisateur et si l'utilisateur a un jeton d'authentification défini.
  • Le serveur Rails sera de retour l'actuel auth jeton sur chaque appel. Si elle renvoie une valeur null auth jeton de la Braise à l'application devrait le détecter et de transition vers le non authentifié de l'état, de la redirection vers la vue login.

Je pense que je devrais utiliser une Braise de l'état de la machine pour cela, mais je ne suis pas sûr de savoir comment procéder. Quelqu'un s'est attaqué à ce problème?

51voto

Mike Grassotti Points 15937

Mise à JOUR: Comme @DustMason dit, dans sa réponse, découvrez l'impressionnant embercasts pour l'authentification des meilleures pratiques.

Afin de séparer complètement la vue (Braise app) à partir du serveur (application Rails) je veux utiliser l'authentification par jeton. Je vais probablement utiliser Concevoir sur le serveur Rails.

Du sens.

J'ai besoin de quelque chose comme un before_filter équivalent dans la Braise à l'application, où je peux vérifier si il y a un courant de l'utilisateur et si l'utilisateur a un jeton d'authentification défini.

Vous pouvez ajouter un enter crochet sur les routes, c'est à peu près équivalent à un before_filter. Mais pas sûr que ce soit le meilleur endroit pour rechercher une auth-jeton.

Le serveur Rails sera de retour l'actuel auth jeton sur chaque appel.

Du sens. Nous utilisons des cookies d'authentification et de chercher de l'actuel profil de l'utilisateur en appelant /api/me mais devrait fonctionner.

Si elle renvoie une valeur null auth jeton de la Braise à l'application devrait le détecter et de transition vers le non authentifié de l'état, de la redirection vers la vue login.

Chose à propos de cette approche est que (contrairement à rails), il n'est pas facile de "protéger" l'accès à un particulier de braise routes. Et peu importe ce que l'utilisateur peut toujours ouvrir des pop JS console et entrer dans quelque état qu'ils veulent. Ainsi, au lieu de penser", l'utilisateur ne peut entrer dans cet état si authentifié" considérer "que faire si un utilisateur non authentifié en quelque sorte accède à cette route"

Je pense que je devrais utiliser une Braise de l'état de la machine pour cela, mais je ne suis pas sûr de savoir comment procéder. Quelqu'un s'est attaqué à ce problème?

Notre auth besoins sont assez simples, donc nous n'avons pas trouvé la nécessité pour l'état de la machine. Au lieu de cela, nous avons une isAuthenticated bien sur ApplicationController. Nous utilisons cette propriété en application.hbs pour remplacer la vue principale avec un formulaire de connexion lorsqu'un utilisateur n'est pas authentifié.

{{if isAuthenticated}}
  {{render "topnav"}}
  {{outlet}}
{{else}}
  {{render "login"}}
{{/if}}

De ApplicationRoute, nous allons chercher du profil de l'utilisateur:

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    var profiles;
    profiles = App.Profile.find({ alias: 'me' });
    profiles.on("didLoad", function() {
      return profiles.resolve(profiles.get("firstObject"));
    });
    return profiles;
  }
});

Ensuite, notre ApplicationController calcule c'est isAuthenticated de propriété sur la base du profil a été renvoyée.

19voto

joscas Points 2536

Je conseille de braise-auth pour que. Elle implémente toutes les fonctionnalités nécessaires et fonctionne très bien à mon avis.

Il y a aussi une démo et un tutoriel à Concevoir sur les Rails par le même auteur.

J'ai aussi mis en place une base de Braise application basée sur la Braise-auth avec Concevoir des jetons d'authentification et l'exemple Oauth pour Google et LinkedIn qui peut être trouvé ici et est en direct ici: https://starter-app.herokuapp.com

12voto

Martin Stannard Points 461

J'ai récemment changé de système d'authentification sur mesure pour utiliser ember-simple-auth et j'ai trouvé très facile de l'intégrer à mon application. Il répond à toutes les exigences des PO et intègre également un support pour les jetons d'actualisation.

Ils ont une très belle API et une belle série d'exemples. Toute personne intéressée par l’authentification basée sur les jetons devrait s’y intéresser.

4voto

DustMason Points 1224

Le routeur asynchrone Ember, récemment publié, facilite, à mon avis, la configuration d'un bon flux d'authentification! Découvrez la série en deux parties sur http://www.embercasts.com/ pour un bon exemple.

3voto

jhosteny Points 198

Josep de l' exemple d'application est vraiment sympa. J'ai fait une copie de ses pensions de montrer comment le faire avec ActiveRecord au lieu de mongoid, et permettrait également de Concevoir confirmable module. Vous pouvez le trouver ici. Ce repo a été reconstruit à partir de zéro, plutôt que de fourche, comme je voulais me forcer à passer par toutes les étapes pour le faire fonctionner. Je vais mettre à jour cette réponse si j'ajoute une fourche avec les modifications nécessaires pour le faire fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X