2014-05-07 12 views
5

Ich verwende ember-simple-auth in meiner Anwendung und es funktioniert gut, aber ich würde gerne in der Lage sein, Eigenschaften des aktuellen Benutzers (wie E-Mail oder Name) in der Benutzeroberfläche anzuzeigen. In der Vergangenheit habe ich einen Anwendungsinitialisierer verwendet, um dies zu tun und im Wesentlichen alle Controller mit dem currentUser zu injizieren, aber das erforderte, dass der aktuelle Benutzer bekannt war, als die Anwendung initialisiert wurde. Da ich OAuth verwende, ist dem Benutzer beim Laden der Anwendung nicht bekannt.Zugriff auf Kontoinformationen des Benutzers mit Ember Simple Auth

Gibt es eine Möglichkeit, Eigenschaften vom aktuell angemeldeten Benutzer zu erhalten?

Antwort

7

Es stellte sich heraus, dass die Version von ember-simple-auth, die ich verwendete, veraltet war und auf 0.3.x (von 0.2.x) aktualisiert werden musste. Von dort konnte ich einen benutzerdefinierten Authentifikator hinzufügen, den ich fast direkt aus den Beispieldateien des Projekts gezogen habe. Beachten Sie, dass ich auf Ember 1.6.0 Beta 2 bin.

Mit dem folgenden Code kann ich auf den aktuellen Benutzer in Routen und Controller mit this.get('session.currentUser') zugreifen oder in Vorlagen mit {{session.currentUser}}.

Die einzige Änderung, die ich an meiner API vornehmen musste, war die user_id mit der OAuth-Antwort.

aus der vorherigen Antwort aktualisiert 0.4.0

Dann meine ich initializer aktualisiert zu unterstützen, die folgenden sein:

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

jetzt Mein Login-Controller wie folgt aussieht:

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

Das ist absolut Gold! Ich habe seit Monaten versucht, einen guten Weg zu finden, dies mit Ember-Simple-Auth zu tun. Dies sollte wirklich Teil der Dokumentation sein (wenn nicht die Standardimplementierung). – opsb

+0

@opsb Ich habe gerade meine Antwort aktualisiert, weil sie nach einer kürzlichen Veröffentlichung von ember-simple-auth sogar noch vereinfacht werden kann. Der benutzerdefinierte Authentifikator wird nicht mehr benötigt. –

+0

schön, das sieht sauberer aus. – opsb

Verwandte Themen