2016-08-18 2 views
0

세션이 인증 될 때 현재 사용자를 확보해야합니다. 나는 서비스 currentUserember-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

사용자 로그인 또는 가입, 이벤트 authenticationSucceeded가 호출
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(); 
    } 

}); 

하지만 세션이 복원되어 내 authenticator 이벤트가 호출되지 않습니다. 사용자 정보를 다시로드해야하기 때문에 전화해야합니다.

답변

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)) { 이 this._loadCurrentUser()를 반환합니다; } },' – EnriMR