我有一个Angular应用程序,它使用我在Laravel中构建的API,并且我使用jwt-auth进行令牌管理,并在前端使用satellizer来为每个请求发送令牌。
我的实时环境(对于前端和API - 在应用完成后将移动到不同的服务器)此时由2个运行带有负载均衡器的nginx的AWS EC2实例组成。两台服务器都有相同的jwt密钥。
然而,目前我无法解决任何模式,我会随机获得400" token_invalid"从我的api返回的错误。它不是一个特定的api路由,也不是应用程序的每个负载。当我从我的/客户端端点收到400错误时,其他请求将返回200。下一次,所有人都将返回200。之后的时间我可能会为/ clients返回200但是/ users的400错误。
这可能是我使用负载均衡器的问题吗?正如我所说,jwt密钥在两台服务器上是相同的 - 因为所有代码都在GIT中。
我没有使用jwt.refresh中间件。
另外需要提一下的是,在通过Homestead在本地运行应用程序时,我不会得到400错误。
编辑 - 好像退出(清除我的用户对象(仅基本详细信息)和本地存储中的令牌,清除缓存,然后重新登录通常会导致错误 - 这有用吗?
以下是我的一个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
})
我真的很难调试这个,所以任何帮助都会非常感激。如果需要更多信息,请告诉我。
答案 0 :(得分:0)
https://github.com/tymondesigns/jwt-auth/issues/1583
解决方案:在 .env 文件中使用相同的 jwt secret