0

我正在实现一个 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 路由)?

4

0 回答 0