Okazało się, że wersja ember-simple-auth, której używałem, była nieaktualna i wymagała aktualizacji do 0.3.x (z 0.2.x). Stamtąd udało mi się dodać niestandardowego uwierzytelniającego, który wyciągnąłem prawie bezpośrednio z przykładowych plików projektu. Zauważ, że jestem na Ember 1.6.0 beta 2.
Za pomocą poniższego kodu, mogę uzyskać dostęp do currentUser w trasach i kontrolerach przy użyciu this.get('session.currentUser')
lub w szablonach przy użyciu {{session.currentUser}}
.
Jedyną zmianą, którą musiałem wprowadzić w moim interfejsie API, było wprowadzenie user_id
z odpowiedzią OAuth.
Aktualizacja z poprzedniej odpowiedzi wspierać 0.4.0
Potem zaktualizowaną mój inicjator być następujące:
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'
});
}
});
Mój kontroler logowanie teraz wygląda tak:
export default Ember.Controller.extend(Ember.SimpleAuth.LoginControllerMixin, {
authenticatorFactory: 'ember-simple-auth-authenticator:oauth2-password-grant'
});
To jest absolutne złoto! Od miesięcy staram się znaleźć dobry sposób na zrobienie tego z ember-simple-auth. To powinno być częścią dokumentacji (jeśli nie standardową implementacją). – opsb
@opsb Właśnie zaktualizowałem swoją odpowiedź, ponieważ można ją jeszcze bardziej uprościć po ostatnim wydaniu ember-simple-auth. Niestandardowy wystawca uwierzytelnienia nie jest już wymagany. –
miło, że wygląda czystsze. – opsb