如何在简单的ember auth中处理错误401?

时间:2016-02-05 05:41:45

标签: authentication ember.js ember-cli

问题是会话将在预定的时间后过期。很多时候,当发生这种情况时,仍然会加载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。任何人都有解决这个问题的工作方法吗?

1 个答案:

答案 0 :(得分:0)

如果您正在使用DataAdapterMixin,它将自动处理对Ember数据请求的所有401响应,并在会话结束时使会话无效。如果您正在制作自己的AJAX请求,则必须自己处理这些响应。

1.0.0中删除了所有请求的自动授权以及自动响应处理,因为它导致了全局状态的许多问题,并使整个库更难以推理。