我正在实现jwt刷新机制。我在Angular 7中使用auth0/angular2-jwt。当我访问受保护的路由时,我正在通过Authorization标头中的access_token
向/ api / v1 / protected发送请求。当我需要刷新jwt令牌时,必须使用授权标头中的refresh_token
将请求发送到/ api / v1 / auth / refresh。
我不知道如何根据api路由选择要发送的令牌。
app.module.ts
import { JwtModule, JWT_OPTIONS } from '@auth0/angular-jwt';
import { HttpClientModule } from '@angular/common/http';
import { TokenService } from './services/token.service';
export function jwtOptionsFactory(tokenService) {
return {
tokenGetter: () => {
return tokenService.getAsyncToken();
},
whitelistedDomains: [
'localhost',
'localhost:80',
'localhost:443',
'localhost:4200',
],
blacklistedRoutes: [],
throwNoTokenError: false,
}
}
...
@NgModule({
...
imports: [
HttpClientModule,
JwtModule.forRoot({
jwtOptionsProvider: {
provide: JWT_OPTIONS,
useFactory: jwtOptionsFactory,
deps: [TokenService]
}
}),
],
...
})
token.service.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class TokenService {
constructor() { }
getAsyncToken(){
// This is the part in question
if (route=='/api/v1/auth/refresh') {
return localStorage.getItem('refresh_token');
}
return localStorage.getItem('access_token');
}
}
我的计划B是将angulat-jwt中的刷新路由列入黑名单,并编写一个自定义拦截器。 但是我想知道我是否有些混乱。可以在我的令牌服务中拦截api调用(检查api路由)吗?