Я использую ember-simple-auth 1.1.0 с проверкой файлов cookie, и я создал собственный аутентификатор с функциями (восстановление, аутентификация и аннулирование) и инициализатор пользовательского аутентификатора ,
Я привязываюсь к событию ajaxError, чтобы мы могли поймать любые ошибки. Например, для доступа к маршруту с ответом сервера 401 Not Authorized. Я хотел бы аннулировать сеанс и перенаправить пользователя на страницу входа.Emberjs: как аннулировать сеанс в пользовательском инициализаторе инициализации
На данный момент я не могу получить сеанс по умолчанию с 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) {
}
});
}
};
Мой заказ Authenticator:
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();
});
});
}
});