我将Cookie认证使用ember-simple-auth 1.1.0,并创建了一个具有功能(恢复,认证和无效)的自定义身份验证器以及该自定义身份验证器的初始化程序。
我绑定了ajaxError事件,因此我们可以捕获任何错误。例如,使用服务器响应401未授权访问路由。我想使会话无效,并将用户重定向回登录页面。
目前,我无法在初始化程序中获得ember-simple-auth默认会话,因此我可以使该会话无效。我没有为我的应用程序创建任何自定义会话。
做这个的最好方式是什么?
如果不可能,是否最好在初始化器上触发一个事件并在路由中捕获该事件?我们该怎么做?
我的自定义初始化程序如下所示:
import BasicAuthenticator from '../authenticators/basic';
export default {
before: 'ember-simple-auth',
name: 'basic-authenticator',
initialize(application) {
application.register('authenticator:basic', BasicAuthenticator);
Ember.$(document).ajaxError((event, jqxhr, settings, reason) => {
if (jqxhr.status === 401) {
}
});
}
};
我的自定义身份验证器:
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';
export default Base.extend({
restore() {
return new Ember.RSVP.Promise(function(resolve, reject) {
let sessionCookie = window.Cookies.get('beaker.session.id');
if(!window.isUndefined(sessionCookie)) {
resolve(true);
}else{
reject();
}
});
},
authenticate(data) {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.$.ajax({
type: 'post',
url: '/core/authentication/basic/login',
data: data
}).then((response) => {
resolve({
responseText: response
});
}, (error) => {
reject(error);
});
});
},
invalidate() {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.$.ajax({
type: 'post',
url: '/core/authentication/basic/logout'
}).then(() => {
resolve(true);
}, () => {
reject();
});
});
}
});
我找到了有关如何在初始化程序中获取会话的解决方案。
在我发现的解决方案下方:
import BasicAuthenticator from '../authenticators/basic';
export default {
before: 'ember-simple-auth',
name: 'basic-authenticator',
initialize(application) {
application.register('authenticator:basic', BasicAuthenticator);
Ember.$(document).ajaxError((event, jqxhr, settings, reason) => {
let service = application.__container__.lookup('service:session');
let session = service.get('session');
if (jqxhr.status === 401) {
session.invalidate();
}
});
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句