使用ember-simple-auth捕获失败的请求

时间:2014-09-05 15:35:40

标签: ember.js ember-simple-auth

我正在添加允许用户拒绝未过期的oauth令牌的功能。 (我使用的是ember-simple-auth-oauth2和自定义的oauth2实现)。

我想使用被拒绝的令牌通知客户,他们的令牌被手动拒绝。

来自服务器的401响应包含令牌不再有效的原因({message:“令牌已被ip 1.1.1.1过期”}。)

会话或应用程序mixin中的invalidationSucceeded回调或事件似乎都没有传递给此信息的401请求。

有没有办法在重定向之前访问返回401的请求的主体?

3 个答案:

答案 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来传递实际的身份验证逻辑。