【发布时间】:2016-03-24 21:29:49
【问题描述】:
我正在使用 Ember 1.13.8 开发一个带有 Rails 后端的应用程序,该后端使用 Devise 进行身份验证,并且我正在尝试升级到 ember-simple-auth。
我已尽我所能遵循http://simplabs.com/blog/2015/11/27/updating-to-ember-simple-auth-1.0.html 的升级路径指南。一切都像以前一样工作,除了当我保存对代码的更新时,livereload 会导致以下错误,而不是重新加载某些页面:
ember.debug.js:24180 处理路由时出错:users.index 错误: 断言失败:您不能将
undefined作为 id 传递给商店的 找方法
我注意到错误发生在身份验证器的 restore() 方法被调用之前。
从重新加载路由调用时导致错误的属性 (currentUserId) 位于会话服务的扩展中(已删减):
import Ember from 'ember';
import SessionService from 'ember-simple-auth/services/session';
export default SessionService.extend({
session: Ember.inject.service('session'),
store: Ember.inject.service(),
currentUserId: Ember.computed( 'session.content.authenticated.user.id', function() {
var sessionUserId = this.get( 'session.content.authenticated.user.id' );
if ( !Ember.isEmpty( sessionUserId ) ) {
return this.get( 'session.content.authenticated.user.id' );
}
}).property( 'sessionUserId' ),
});
控制台日志显示,在 currentUserId 属性中,this.get('session.isAuthenticated') 是 false,this.get('session.data.authenticated') 是 {}。
我已将 AuthenticatedRouteMixin 包含在我正在尝试的路线中,但问题仍然存在。
这是我的自定义身份验证器:
import Ember from 'ember';
import DeviseAuthenticator from 'ember-simple-auth/authenticators/devise';
import ENV from '../config/environment';
import sha1 from 'npm:sha1';
export default DeviseAuthenticator.extend( {
store: Ember.inject.service(),
tokenAttributeName: 'auth_token',
identificationAttributeName: 'email',
resourceName: 'user',
authenticate: function( credentials ) {
var _this = this;
this.get( 'session' )
.set( 'currentUserPassword', sha1( credentials.password ) );
let promise = new Ember.RSVP.Promise( function( resolve, reject ) {
_this.makeRequest( credentials ).then( function( response ) {
Ember.run( function() {
resolve( response );
} );
}, function(xhr, status, error) {
var response = xhr.responseText;
Ember.run(function() {
reject(response);
} );
} );
});
return promise;
},
restore: function(data) {
console.log("Trying to restore; data: ");
console.log( data );
return new Ember.RSVP.Promise(function(resolve, reject) {
if (!Ember.isEmpty(data.auth_token)) {
resolve(data);
} else {
reject();
}
});
},
invalidate: function() {
console.log('invalidate...');
return Ember.RSVP.resolve();
},
makeRequest: function( credentials ) {
var uuid = "abc123";
if( typeof( window.device ) !== 'undefined' ) {
uuid = window.device.uuid;
}
return Ember.$.ajax( {
type: 'POST',
dataType: 'json',
url: ENV.apiHost + '/api/v1/users/sign_in',
data: {
"user": {
"email": credentials.identification,
"password": credentials.password,
},
"device": {
"uuid": uuid
}
}
} );
},
} );
升级后我需要进行哪些更改来修复 livereload,而不是在每次代码更改后重新登录?
【问题讨论】:
标签: ember.js ember-simple-auth