如何在angularjs中使用拦截器刷新JWT令牌?
我的应用程序后端实现在Lumen中,每次用户登录时都会提供一个JWT令牌。我使用Angular的前端将令牌保存在本地存储中,并且在后续请求中将其添加到所有头中。 通过创建我正在使用的请求来检查令牌到期并刷新 我将在应用程序的配置中添加令牌刷新代码,但当我发出任何其他请求时,从未调用此方法。这里是我尝试的代码如何在angularjs中使用拦截器刷新JWT令牌?,angularjs,jwt,Angularjs,Jwt,我的应用程序后端实现在Lumen中,每次用户登录时都会提供一个JWT令牌。我使用Angular的前端将令牌保存在本地存储中,并且在后续请求中将其添加到所有头中。 通过创建我正在使用的请求来检查令牌到期并刷新 我将在应用程序的配置中添加令牌刷新代码,但当我发出任何其他请求时,从未调用此方法。这里是我尝试的代码 app.config(function Config($httpProvider, jwtInterceptorProvider) { jwtInterceptorProvider.
app.config(function Config($httpProvider, jwtInterceptorProvider) {
jwtInterceptorProvider.tokenGetter = function(jwtHelper, $http,$localStorage) {
if ($localStorage.currentUser) {
var token = $localStorage.currentUser.token;
if (jwtHelper.isTokenExpired(token)) {
return $http({
url: 'http://backend.mywebsite.com/token',
method: 'GET'
}).then(function(response) {
var token = response.token;
$localStorage.currentUser.token = token;
$http.defaults.headers.common.Authorization = 'Bearer ' + $localStorage.currentUser.token;
return token;
});
} else {
return token;
}
}
}
$httpProvider.interceptors.push('jwtInterceptor');
});
我想知道如何配置此功能,以便每当令牌过期时,它都会自动刷新并设置在http头中?您应该考虑的要点
angular.module('app',['angular-jwt']))
.config(函数配置($httpProvider、jwtInterceptorProvider){
jwtInterceptorProvider.tokenGetter=函数(jwtHelper,$http){
var jwt=localStorage.getItem('jwt');
var refreshttoken=localStorage.getItem('refresh_-token');
如果(jwtHelper.isTokenExpired(jwt)){
//这是JWT id_代币的承诺
返回$http({
url:“/委派”,
//这将不会为此呼叫发送JWT
skipAuthorization:没错,
方法:“POST”,
刷新令牌:刷新令牌
}).然后(功能(响应){
setItem('JWT',response.data.JWT');
返回jwt;
});
}否则{
返回jwt;
}
}
$httpProvider.interceptors.push('jwtInterceptor');
})
如果您想了解有关刷新令牌及其工作方式的更多信息,可以查看此信息。这与我所做的差不多,但在令牌过期时不会触发请求。在您的实现中,我看不到任何刷新令牌,在您的示例代码中,此行缺少
$httpProvider.interceptors.push('jwtInterceptor')代码>我已经有了那行代码来注册拦截器,我已经更新了代码。发生的事情是,只有在我登录时才会调用拦截器,这是唯一一次检查令牌。对于进一步的请求,令牌没有被检查,因此我得到了一个401Ok,我得到了这个工作,问题出现在angular jwt库中,因为它在头中传递旧令牌。在参考和可能的情况下,我能够让它工作