2014-05-07 4 views
5

J'utilise ember-simple-auth dans ma demande et il fonctionne bien, mais je voudrais être en mesure d'afficher les propriétés de l'utilisateur en cours (comme le courrier électronique ou le nom) dans l'interface utilisateur. Dans le passé, j'ai utilisé un initialiseur d'application pour cela et essentiellement injecter tous les contrôleurs avec currentUser, mais cela nécessitait que l'utilisateur actuel soit connu lorsque l'application était initialisée. Comme j'utilise OAuth, l'utilisateur n'est pas connu lorsque l'application est chargée.l'information du compte utilisateur d'accès à Ember simple Auth

Y at-il un moyen d'obtenir des propriétés de l'utilisateur actuellement connecté?

Répondre

7

Il est avéré que la version de Ember-simple-auth j'utilisais était obsolète et devait passer à 0.3.x (de 0.2.x). À partir de là, j'ai pu ajouter un authentificateur personnalisé que j'ai extrait presque directement des fichiers d'exemple du projet. Notez que je suis sur Ember 1.6.0 beta 2.

Avec le code ci-dessous, je peux accéder à currentUser dans les routes et les contrôleurs en utilisant this.get('session.currentUser') ou dans les modèles en utilisant {{session.currentUser}}.

Le seul changement que je devais faire à mon API a été notamment le user_id avec la réponse OAuth.

Mise à jour de la réponse précédente pour soutenir 0.4.0

Je mis à jour mon initialiseur être les suivants:

App.initializer({ 
    name: 'authentication', 

    initialize: function(container, application) { 
    Ember.SimpleAuth.Authenticators.OAuth2.reopen({ 
     serverTokenEndpoint: '/api/oauth/token' 
    }); 

    Ember.SimpleAuth.Session.reopen({ 
     currentUser: function() { 
     var userId = this.get('user_id'); 
     if (!Ember.isEmpty(userId)) { 
      return container.lookup('store:main').find('current-user', userId); 
     } 
     }.property('user_id') 
    }); 

    Ember.SimpleAuth.setup(container, application, { 
     authorizerFactory: 'ember-simple-auth-authorizer:oauth2-bearer', 
     routeAfterAuthentication: 'main.dashboard' 
    }); 
    } 
}); 

Mon contrôleur de connexion ressemble maintenant à ceci:

export default Ember.Controller.extend(Ember.SimpleAuth.LoginControllerMixin, { 
    authenticatorFactory: 'ember-simple-auth-authenticator:oauth2-password-grant' 
}); 
+1

C'est de l'or absolu! J'ai eu du mal à trouver un bon moyen de le faire avec ember-simple-auth pendant des mois. Cela devrait vraiment faire partie des documents (si ce n'est l'implémentation standard). – opsb

+0

@opsb Je viens mis à jour ma réponse, car il peut être simplifié encore plus après une publication récente de Ember-simple-auth. L'authentificateur personnalisé n'est plus requis. –

+0

sympa, ça a l'air plus propre. – opsb

Questions connexes