Nest JS 添加另一个密钥以使用 @nestjs/jwt 刷新令牌

Max*_*ich 4 jwt nestjs

我正在尝试使用 NestJs 上的访问和刷新令牌进行身份验证。正如我在 Nestjs 文档中看到的那样,我应该在 auth 模块中注册我的密钥。我就是这么做的。

@Module({
  imports: [
    MongooseModule.forFeature([{ name: 'RefreshToken', schema: RefreshTokenSchema }]),
    UsersModule,
    PassportModule,
    JwtModule.register({
      secret: jwtConstants.secret,
    }),
  ],
  providers: [AuthService, LocalStrategy, JwtStrategy],
  controllers: [AuthController],
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)

当我在身份验证服务中创建令牌时,将使用此密钥。

import { JwtService } from '@nestjs/jwt';
const accessToken = this.jwtService.sign(payload, { expiresIn: '60s'});
const refreshToken = this.jwtService.sign(payload, { expiresIn: '24h' });
Run Code Online (Sandbox Code Playgroud)

当我尝试在 this.jwtService.sign 函数中设置密钥时,例如

const accessToken = this.jwtService.sign(payload, 'secretkey' ,{ expiresIn: '60s'})
Run Code Online (Sandbox Code Playgroud)

我有错误。它告诉我该函数只能获取两个参数。那么如何创建两个密钥并互相使用以获得正确的令牌呢?

Jar*_*arr 5

如果我理解正确的话。您似乎正在尝试使用两种单独的策略来签署两种不同类型的令牌?如果是这样,您只需要使用多个命名策略即可。

在您的声明中,您可以执行以下操作:

export class JwtStrategy extends PassportStrategy(Strategy, 'accessToken') {}
Run Code Online (Sandbox Code Playgroud)
export class JwtStrategy2 extends PassportStrategy(Strategy, 'refreshToken') {}
Run Code Online (Sandbox Code Playgroud)

现在,通过这两个不同的名称,您还可以指定默认策略。这似乎是您的访问令牌。

@Module({
  imports: [
    MongooseModule.forFeature([{ name: 'RefreshToken', schema: RefreshTokenSchema }]),
    UsersModule,
    PassportModule.register({ defaultStrategy: 'accessToken' }),
    JwtModule.register({
      secret: jwtConstants.secret,
    }),
  ],
  providers: [AuthService, LocalStrategy, JwtStrategy, JwtStrategy2],
  controllers: [AuthController],
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)

这应该允许您使用两种服务类型从构造函数执行导入。

然后,您的上面的代码应该可以通过为分配的任务单独调用每个服务来在不同时间进行签名!我没有运行这段代码,但它应该可以通过一些调整来工作。

  • 您不能只更改服务中的令牌签名吗? (2认同)
  • 在这种情况下如何使用第二个“jwtService”? (2认同)