我正在使用AngularJS + Laravel 5构建一个使用JWT作为身份验证的应用程序。问题是登录到应用程序后,有时它会起作用,有时它不会。
我倾向于认为这更像是角度方面,因为使用Postman测试API永远不会失败,我将令牌复制并粘贴到标题中,一切运行顺利。
当通过Chrome导航时,在登录后我会在请求标头中收到令牌,在localStorage中使用angular保存它,下一个请求会发送新令牌,但服务器会以{error: "token_invalid"}
我的令牌请求就像角度文档说的那样
`return $http({
url: 'http://localhost:8888/api/authenticate',
skipAuthorization: true,
method: 'POST',
data: { grant_type: 'refresh_token', refresh_token: refreshToken }
}).then(function(response) {
var jwt = response.headers().authorization;
localStorage.setItem('jwt', jwt);
return jwt;
});`
使用chrome XHRs,我看到以下内容
我登录到应用程序并获得带有响应标头Authorization:Bearer eyJ0eX...
的XHR
我发出第二个请求,应用会自动发送Authorization:Bearer Bearer eyJ0eX...
作为请求标头
请注意Bearer
由于某种原因而重复,但Laravel的Tymon / JWTAuth库剥离了Bearer方法,只留下了令牌部分(eyJ0eX ...)。
实际上,将Bearer Bearer eyJ0eX...
复制为Postman中的标题可以正常工作。
下一个请求出现了真正的问题,我收到了新的令牌Authorization:Bearer eyJ0eX2...
,但是当我在新请求中发送它时,我收到401错误,令牌无效,有时它已经过期而不是无效。
在Postman中粘贴Authorization:Bearer eyJ0eX2...
也会拒绝令牌,但由于它是一个新令牌,它不应该。
angular / angular-jwt做什么来使刚刚生成但尚未使用的令牌无效? 为什么有时它会起作用?