问题是会话将在预定的时间后过期。很多时候,当发生这种情况时,仍然会加载ember.js应用程序。因此,对后端的所有请求都会返回 401 {not autorized} 响应。
所以我需要将用户重定向到登录页面并清除会话中的最后一个令牌,以便 经过身份验证 属性变得虚假。
我正在使用自定义身份验证器。
import Base from 'ember-simple-auth/authenticators/base';
import ENV from '../config/environment';
import Ember from 'ember';
export default Base.extend({
restore: function(data) {
return new Ember.RSVP.Promise(function (resolve, reject) {
if (!Ember.isEmpty(data.token)) {
resolve(data);
}
else {
reject();
}
});
},
authenticate: function(options) {
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax({
type: "POST",
contentType: 'application/json',
url: ENV.CONSTANTS.API_URL + '/authentication',
data: JSON.stringify({
username: options.username,
password: options.password
})
}).then(function(response) {
if(!response.token){
Ember.run(function(){
reject(response.message);
});
} else {
Ember.run(function() {
resolve(response);
});
}
}, function(xhr, status, error) {
Ember.run(function() {
reject(xhr.responseJSON || xhr.responseText);
});
});
});
},
invalidate: function(data) {
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax({
type: "GET",
url: ENV.CONSTANTS.API_URL + '/authentication/logout'
}).then(function(response) {
Ember.run(function() {
resolve(response);
});
}, function(xhr, status, error) {
Ember.run(function() {
reject(xhr.responseJSON || xhr.responseText);
});
});
});
}
});
我正在使用ember simple auth 1.0.0。任何人都有解决这个问题的工作方法吗?
答案 0 :(得分:0)
如果您正在使用DataAdapterMixin
,它将自动处理对Ember数据请求的所有401响应,并在会话结束时使会话无效。如果您正在制作自己的AJAX请求,则必须自己处理这些响应。
1.0.0中删除了所有请求的自动授权以及自动响应处理,因为它导致了全局状态的许多问题,并使整个库更难以推理。