我正在努力为使用EAK的应用程序中的身份验证提供快速而肮脏的基础。 authenticate函数按预期工作:它查找匹配的电子邮件,并在找到它时解析承诺。
出于某种原因,永远不会在页面重新加载时调用还原方法......或者根本不会。我不知道这是EAK,ESA或其他我做错的问题。
var customAuthenticator = Ember.SimpleAuth.Authenticators.Base.extend({
resourceName: 'user',
identifierField: 'email',
restore: function (data) {
console.log('Attempt to restore -> ', data);
return new Ember.RSVP.Promise(function (resolve, reject) {
resolve(data);
});
},
authenticate: function (credentials) {
var self = this;
return new Ember.RSVP.Promise(function (resolve, reject) {
var idObject = {};
idObject[self.identifierField] = credentials.identification;
self.get('store').find(self.resourceName, idObject).then(function (user) {
var dataId;
if(user.get('content').length) {
dataId = user.get('content').objectAt(0).get('data').id;
resolve({userId: dataId});
} else {
reject();
}
});
});
},
invalidate: function () {
console.log('Attempt to invalidate');
return new Ember.RSVP.Promise(function (resolve, reject) {
resolve();
});
}
});
export default {
name: 'authentication',
initialize: function (container, application) {
Ember.SimpleAuth.Session.reopen({
user: function() {
if (!Ember.isEmpty(this.get('userId'))) {
return container.lookup('store:main').find('user', +this.get('userId'));
}
}.property('userId')
});
container.register('authenticator:custom', customAuthenticator);
container.injection('authenticator:custom', 'store', 'store:main');
Ember.SimpleAuth.setup(container, application);
}
};
任何见解都将不胜感激!
修改
以下是初始身份验证后本地存储的内容:
编辑:在断点后拍摄本地范围
编辑:为恢复方法添加了一些调试行
restore: function() {
var _this = this;
return new Ember.RSVP.Promise(function(resolve, reject) {
var restoredContent = _this.store.restore();
var authenticatorFactory = restoredContent.authenticatorFactory;
if (!!authenticatorFactory) {
console.log('Log 1');
delete restoredContent.authenticatorFactory;
console.log('Log 2');
_this.container.lookup(authenticatorFactory).restore(restoredContent).then(function(content) {
console.log('Log 3');
_this.setup(authenticatorFactory, content);
resolve();
}, function() {
_this.store.clear();
reject();
});
} else {
_this.store.clear();
reject();
}
});
},
永远不会到达“Log 3”行。我也尝试手动执行_this.container.lookup('authenticator:custom')
,这似乎导致超出它的任何行都无法到达。所以看起来查找存在问题。
编辑:从初始化程序中删除行container.injection('authenticator:custom', 'store', 'store:main')
时,将调用restore方法。显然,没有商店,验证器不是很有用,所以可能需要一种不同的处理方法。
更多:似乎对身份验证器的任何注入都会导致此问题,而不仅仅是注入商店。
答案 0 :(得分:1)
问题是我在调用Ember.SimpleAuth.setup(container, application)
之前尝试注入依赖项。这是正常运行的初始化代码:
export default {
name: 'authentication',
initialize: function (container, application) {
Ember.SimpleAuth.Session.reopen({
user: function() {
if (!Ember.isEmpty(this.get('userId'))) {
return container.lookup('store:main').find('user', +this.get('userId'));
}
}.property('userId')
});
container.register('authenticator:custom', customAuthenticator);
Ember.SimpleAuth.setup(container, application);
container.injection('authenticator:custom', 'store', 'store:main');
}
};
答案 1 :(得分:0)
您需要做的就是在 simple-auth之前注册自定义身份验证器。
基本上,在导出的对象中添加before: 'simple-auth'