我正在实现一个 jwt 刷新机制。我在 Angular 7 中使用auth0/angular2-jwt。当我访问受保护的路由时,我access_token
在 Authorization 标头中向 /api/v1/protected 发送请求。当我需要刷新 jwt 令牌时,我必须refresh_token
在 Authorization 标头中向 /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]
}
}),
],
...
})
令牌服务.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 路由)?