Laravel/jwt-auth 和 Angular/Satellizer 应用程序出现随机 400“token_invalid”错误

Posted

技术标签:

【中文标题】Laravel/jwt-auth 和 Angular/Satellizer 应用程序出现随机 400“token_invalid”错误【英文标题】:Random 400 "token_invalid" errors with Laravel / jwt-auth and Angular / Satellizer app 【发布时间】:2016-12-28 23:08:22 【问题描述】:

我有一个 Angular 应用程序,它使用我在 Laravel 中构建的 API,我使用 jwt-auth 进行令牌管理,并在前端使用 satellizer 来随每个请求发送令牌。

目前我的实时环境(用于前端和 API - 一旦应用程序完成后将移动到不同的服务器)由 2 个 AWS EC2 实例组成,这些实例运行带有负载均衡器的 nginx。两台服务器具有相同的 jwt 密钥。

但是,目前我无法找出任何模式,我的 api 随机返回了 400 个“token_invalid”错误。它不是一个特定的 api 路由,也不是应用程序的每次加载。例如,当我从 /clients 端点收到 400 错误时,其他请求将返回 200。下一次,所有将返回 200 的。之后的时间,我可能会为 /clients 返回 200,但为 /users 返回 400 错误。

这可能是我使用负载平衡器的问题吗?正如我所说,jwt 密钥在两台服务器上都是相同的 - 因为所有代码都在 GIT 中。

我没有使用 jwt.refresh 中间件。

另一件要提的事情是,当我通过 Homestead 在本地运行应用程序时,我从来没有收到 400 错误返回,只有在生产环境中。

EDIT - 似乎注销(这会清除我的用户对象(仅基本详细信息)和本地存储中的令牌,清除我的缓存,然后重新登录通常会导致错误- 这有帮助吗?

以下是我的一个 api 调用示例。

App.js

.service('ClientsService', function($http, $q, __env) 
    this.index = function () 
        var deferred = $q.defer();
        $http.get(__env.apiUrl + '/clients')
            .then(function successCallback(response) 
                    console.log(response.data);
                    deferred.resolve(response.data);
                ,
                function errorCallback(response) 
                    console.log(response);
                );
        return deferred.promise;
    
)

ClientsController.js

.controller('ClientsController', function(ClientsService, $stateParams, $mdDialog, $mdToast) 
            var vm = this;
            ClientsService.index().then(function(clients) 
                console.log('ClientsCtrl init');
                vm.clients = clients.data;
            );
            // other controller code
)

我真的很难调试这个,所以任何帮助将不胜感激。如果需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

https://github.com/tymondesigns/jwt-auth/issues/1583

解决方案:在 .env 文件中使用相同的 jwt 密码

【讨论】:

以上是关于Laravel/jwt-auth 和 Angular/Satellizer 应用程序出现随机 400“token_invalid”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ngAA 集成到 Laravel jwt-auth

Laravel 8 tymon/jwt-auth 使另一个用户的令牌无效

前端小白之每天学习记录----angula2--

angularjs 学习笔记

1vueJs入门知识

angularjs脏检查机制