我正在添加允许用户拒绝未过期的oauth令牌的功能。 (我使用的是ember-simple-auth-oauth2和自定义的oauth2实现)。
我想使用被拒绝的令牌通知客户,他们的令牌被手动拒绝。
来自服务器的401响应包含令牌不再有效的原因({message:“令牌已被ip 1.1.1.1过期”}。)
会话或应用程序mixin中的invalidationSucceeded回调或事件似乎都没有传递给此信息的401请求。
有没有办法在重定向之前访问返回401的请求的主体?
答案 0 :(得分:3)
ApplicationRouteMixin
,则 401 Unauthorized将触发authorizationFailed
action。如果您未使用ApplicationRouteMixin
,则可以订阅会话authorizationFailed
event。
答案 1 :(得分:1)
您可以自定义适配器并覆盖ajaxError方法。以下是示例:
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
host: url,
ajaxError: function(jqXHR) {
var error = this._super(jqXHR);
if (jqXHR && jqXHR.status === 401) {
var jsonErrors = Ember.$.parseJSON(jqXHR.responseText)["errors"];
return new DS.InvalidError(jsonErrors);
} else {
return error;
}
}
});
答案 2 :(得分:0)
如果您覆盖控制器中的身份验证操作并在那里处理故障怎么办?
authenticate: function () {
var promise = this._super(),
_this = this;
promise.then(function(result) {
// code to do if succeeded
}).catch(function(result) {
// code to do if failed
});
}
您只需要确保调用super来传递实际的身份验证逻辑。