一尘不染

AngularJS-处理刷新令牌?

angularjs

我正在使用AngularJS构建SPA,并与服务(JAVA)通信。

当用户发送其用户名/密码时,服务会同时发送回:Acces令牌和Refresh令牌。我正在尝试处理:如果收到状态为401的响应,请发送回刷新令牌,然后再次发送您的上一个请求。我试图通过包含$
http来做到这一点,但是angular不允许我在此拦截器中包含它。有什么方法可以使用我正在接收的响应参数来重新创建原始请求吗?

就像是:

  1. 我得到401
  2. 保存我的请求
  3. 如果我有刷新令牌,请发送该刷新令牌
  4. 成功后,重新发送我的请求
  5. 错误时重定向到/ login页面
        'use strict';

    angular.module('testApp')
        .factory('authentificationFactory', function($rootScope, $q, $window, $location, CONF) {

    return {
        request: function(config) {
            config.headers = config.headers || {};
            if ($window.sessionStorage.token) {
                config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
            }
            console.log(config);
            $rootScope.lastRequest = config;
            return config;
        },

        response: function(response) {
            console.log($rootScope.lastRequest);
            if (response.status === 401) {
                if ($window.sessionStorage.refreshToken) {

                    //Save, request new token, send old response
                    //if it fails, go to login

                    $location.url('/login');
                } else {
                    $location.url('/login');
                }
            }
            return response || $q.when(response);
        }
    };
    });

奖励问题(主要问题更重要):有2个移动应用程序也将连接到我的服务,当我从Web应用程序登录时,以及稍后从我的移动应用程序登录后,移动应用程序将使用新的刷新令牌而且我的网络应用的刷新令牌不再有效。处理该问题的最佳选择是什么?

谢谢您的时间,最好的问候


阅读 205

收藏
2020-07-04

共1个答案

一尘不染

看看这个:https :
//github.com/witoldsz/angular-http-auth。

身份验证后,他使用缓冲区重播请求。

2020-07-04