Cookie認証でember-simple-auth1.1.0を使用しており、関数(復元、認証、無効化)を備えたカスタムオーセンティケーターとカスタムオーセンティケーターの初期化子を作成しました。
エラーをキャッチできるように、ajaxErrorイベントにバインドします。たとえば、サーバー応答401 NotAuthorizedを使用してルートにアクセスします。セッションを無効にして、ユーザーをログインページにリダイレクトしたいと思います。
現時点では、初期化子で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]
コメントを追加