2014-05-07 9 views
5

Używam ember-simple-auth w mojej aplikacji i działa dobrze, ale chciałbym móc wyświetlać właściwości z bieżącego użytkownika (takiego jak adres e-mail lub nazwa) w interfejsie użytkownika. W przeszłości używałam inicjalizatora aplikacji do tego i zasadniczo wstrzykiwałam wszystkim kontrolerom bieżący użytkownik, ale to wymagało, aby bieżący użytkownik był znany po zainicjowaniu aplikacji. Ponieważ używam protokołu OAuth, użytkownik nie jest znany podczas ładowania aplikacji.Dostęp do informacji o koncie użytkownika za pomocą Ember Simple Auth

Czy istnieje sposób na uzyskanie właściwości od aktualnie zalogowanego użytkownika?

Odpowiedz

7

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

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

+0

@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. –

+0

miło, że wygląda czystsze. – opsb

Powiązane problemy