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'
});
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
@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. –
schön, das sieht sauberer aus. – opsb