【问题标题】:AngularJs & TokensAngularJs 和令牌
【发布时间】:2016-09-13 11:34:24
【问题描述】:

我正在使用带有 JWT Auth 的 AngularJs。我已经制作了一个 api 并且我已经对其进行了测试。

对于每个请求,api 都期望一个令牌,对于每个响应,它都会返回一个令牌对象。但是当我这样尝试时:

employeeAppModule.config([
        '$httpProvider',
        function ($httpProvider) {
            $httpProvider.interceptors.push(function () {
                var token, headers, $cookies;

                //inject cookies
                angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
                    $cookies = _$cookies_;
                }]);

                return {
                    request: function (request) {
                        token = $cookies.get('jwt-token');
                        headers = request.headers || (request.headers = {});

                        if(token != null && token != 'undefined') {
                            headers.Authorization = token;
                        }
                        return request;
                    },
                    response: function (response) {
                        if (typeof response.data.result === 'undefined') {
                            return response;
                        }

                        if(response.status && response.status.code === 401) {
                            alert('token wordt verwijderd');
                        }

                        if(response.data && response.data.result.token && response.data.result.token.length > 10) {
                            $cookies.put('jwt-token', 'Bearer ' + response.data.result.token);
                        }
                        return response;
                    }
                };
            });
        }]);

它不工作。如果我在请求/响应之间放置几个警报框,它就可以工作。我该如何解决这个问题?

【问题讨论】:

    标签: javascript angularjs jwt


    【解决方案1】:

    您在headers 变量上设置Authorization 属性,然后返回request

    request.headers = headers;
    return request;
    

    这应该可以解决问题。

    不过有几点:

    • 不要将Bearer 放在cookie 本身中,只需将其添加到每个请求的标头中,这样更优雅。
    • 我不确定它是否是有意的,但你真的不应该在每个请求上都返回一个令牌对象。如果这是预期的行为,那我的错!

    【讨论】:

    • 如果您打算定期更新其中的信息,则在每次调用时返回一个新令牌是有意义的,例如,只要用户处于活动状态,您希望延长令牌的有效性。
    • 这只是一个意见。尽管我会争论这是否是延长会话的最佳方式。显然,您的其余主张(双关语)是正确的! :)
    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2015-08-26
    • 2015-05-19
    • 2014-06-15
    相关资源
    最近更新 更多