2014-05-07 7 views
5

Sto usando ember-simple-auth nella mia applicazione e funziona bene, ma vorrei poter visualizzare le proprietà dell'utente corrente (come e-mail o nome) nell'interfaccia utente. In passato ho usato un inizializzatore dell'applicazione per fare questo ed essenzialmente iniettare tutti i controller con l'utente corrente, ma questo richiedeva che l'utente corrente fosse conosciuto quando l'applicazione è stata inizializzata. Poiché sto utilizzando OAuth, l'utente non è noto al caricamento dell'applicazione.Accedi alle informazioni sull'account dell'utente con Ember Simple Auth

C'è un modo per ottenere proprietà dall'utente attualmente connesso?

risposta

7

Si è scoperto che la versione di ember-simple-auth che stavo utilizzando non era aggiornata e che era necessario eseguire l'aggiornamento a 0.3.x (da 0.2.x). Da lì, sono stato in grado di aggiungere un autenticatore personalizzato che ho estratto quasi direttamente dai file di esempio del progetto. Si noti che sono in Ember 1.6.0 beta 2.

Con il codice qui sotto, posso accedere al currentUser nelle rotte e controller utilizzando this.get('session.currentUser') o nei modelli con {{session.currentUser}}.

L'unico cambiamento che dovevo apportare alla mia API era incluso lo user_id con la risposta OAuth.

Aggiornamento dalla risposta precedente per sostenere 0.4.0

Poi ho aggiornato il mio inizializzazione di essere il seguente:

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

mio controller di login ora assomiglia a questo:

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

Questo è oro assoluto! Ho faticato a trovare un buon modo per farlo con ember-simple-auth per mesi. Questo dovrebbe davvero essere parte dei documenti (se non l'implementazione standard). – opsb

+0

@opsb Ho appena aggiornato la mia risposta perché può essere ulteriormente semplificata dopo una recente versione di ember-simple-auth. L'autenticatore personalizzato non è più richiesto. –

+0

bello, sembra più pulito. – opsb