2017-07-02 4 views
0

J'ai une simple application Ember (repo) avec l'authentification en utilisant ember-simple-auth (j'ai suivi cet article https://medium.com/@benhansen/token-based-authentication-with-jwt-ember-and-rails-af54b03fe237). Une fois connecté, j'ai accès à currentUser dans mes routes, contrôleurs et modèles. Cependant, si je navigue vers n'importe quel itinéraire en plus de mon ApplicationRoute et recharger le navigateur, je ne peux plus accéder à currentUser dans cette route, mais il est disponible dans le modèle. Si je retourne à l'itinéraire d'application et navigue à nouveau à l'autre, alors je peux accéder à currentUser. Comment puis-je résoudre ce problème, c'est-à-dire que je veux pouvoir accéder à currentUser dans n'importe quel itinéraire même après rechargement?Ember-simple-auth peut obtenir currentUser après recharge

ApplicationRoute:

import Ember from 'ember'; 
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; 

export default Ember.Route.extend(ApplicationRouteMixin, { 
    sessionAccount: Ember.inject.service(), 
    beforeModel() { 
    this.get('sessionAccount').loadCurrentUser(); 
    } 
}); 

service SessionAccount:

import Ember from 'ember'; 

const { inject: { service }, RSVP } = Ember; 

export default Ember.Service.extend({ 
    session: service('session'), 
    store: service(), 


    loadCurrentUser() { 
    if (this.get('session.isAuthenticated')) { 
     this.get('store') 
     .queryRecord('user', { me: true }) 
     .then((user) => { 
     this.set('currentUser', user); 
     }); 
    } else { 
     return RSVP.resolve(); 
    } 
    } 
}); 

Réservations itinéraire - 'l'autre' itinéraire:

import Ember from 'ember'; 
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    sessionAccount: Ember.inject.service(), 

    model() { 
    const currentUser = this.get('sessionAccount.currentUser'); 

    return this.get('store').query('booking', { 
     filter: { 
     'user_id': currentUser.id 
     }, 
     include: 'rental,rental.rental-ratings' 
    }); 
    } 
}); 

Répondre

0

terminé juste après la forme tutorial Ember repo github auth simples . Qui aurait pensé que cela fonctionnerait :) Devait changer le code dans app/routes/application.js, a également changé le nom de mon service de 'sessionAccount' à 'currentUser':

// app/routes/application.js 
import Ember from 'ember'; 
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; 

const { service } = Ember.inject; 

export default Ember.Route.extend(ApplicationRouteMixin, { 
    currentUser: service(), 

    beforeModel() { 
    return this._loadCurrentUser(); 
    }, 

    sessionAuthenticated() { 
    this._super(...arguments); 
    this._loadCurrentUser(); 
    }, 

    _loadCurrentUser() { 
    return this.get('currentUser').load().catch(() => this.get('session').invalidate()); 
    } 
});