2016-08-18 2 views
0

Мне нужно получить текущего пользователя, когда сеанс аутентифицирован. Я реализовал сервис CurrentUserПочему восстановление не отправляет проверку подлинности событийСовершенствование при использовании ember-simple-auth?

import Ember from 'ember'; 

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

export default Ember.Service.extend({ 
    store: service(), 
    user: null, 

    load() { 
    return this.get('store').find('user', 'me').then((user) => { 
     this.set('user', user); 
    }); 
    } 
}); 

И я называю это в маршрут/application.js

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

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

    init: function(){ 
    return this._super(); 
    }, 

    actions: { 
    invalidateSession() { 
     this.get('session').invalidate(); 
    } 
    }, 

    sessionAuthenticated() { 
    alert("sessionAuthenticated"); 
    this._super(...arguments); 
    this._loadCurrentUser().catch(() => this.get('session').invalidate()); 
    }, 

    _loadCurrentUser() { 
    return this.get('currentUser').load(); 
    } 

}); 

Когда пользователь Войти или регистрация, событие authenticationSucceeded называется, но когда сессия будет восстановлена ​​в моем аутентификатор, событие не вызывается. Мне нужно вызвать его, потому что мне нужно перезагрузить пользовательскую информацию.

ответ

2

Я не думаю, что sessionAuthenticated запускается при восстановлении. Вам необходимо загрузить пользователя в ваш крючок beforeModel.

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

Вы можете посмотреть на официальных документах для настройки текущего пользователя here

+0

Если я сделаю это, я должен проверить каждый раз, когда пользователь открыть мое приложение, если сеанс аутентификации является то, что лучший путь? – EnriMR

+1

Я скажу «да», но, честно говоря, я не могу придумать другой способ реализовать это. –

+0

Он работает очень хорошо, я полагаю, что это единственный способ выполнить обновление текущей информации пользователя с помощью ember-simple-auth. Если вы хотите обновить свой ответ, я использую это, чтобы избежать вызова всегда, даже если ваш сеанс не аутентифицирован: 'beforeModel() { let accessToken = this.get ('session.data.authenticated.userToken'); if (this.get ('session.isAuthenticated') &&! Ember.isEmpty (accessToken)) { return this._loadCurrentUser(); } }, ' – EnriMR

 Смежные вопросы

  • Нет связанных вопросов^_^