jwt - Nest JS 添加另一个密钥以使用 @nestjs/jwt 刷新令牌
问题描述
我正在尝试使用 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 {}
我在身份验证服务中创建我的令牌时使用此密钥。
import { JwtService } from '@nestjs/jwt';
const accessToken = this.jwtService.sign(payload, { expiresIn: '60s'});
const refreshToken = this.jwtService.sign(payload, { expiresIn: '24h' });
当我试图在 this.jwtService.sign 函数中设置密钥时
const accessToken = this.jwtService.sign(payload, 'secretkey' ,{ expiresIn: '60s'})
我有错误。它告诉我函数只能获取两个参数。那么如何创建两个密钥并相互使用以获得正确的令牌呢?
解决方案
如果我理解正确的话。看来您正在尝试使用两种不同的策略来签署两种不同类型的令牌?如果是这样,您只需要使用多个命名策略。
在您的声明中,您可能会执行以下操作:
export class JwtStrategy extends PassportStrategy(Strategy, 'accessToken') {}
export class JwtStrategy2 extends PassportStrategy(Strategy, 'refreshToken') {}
现在,使用这两个不同的名称,您还可以指定您的默认策略。这似乎是您的访问令牌。
@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 {}
这应该允许您使用两种服务类型从构造函数执行导入。
然后,您的上述代码应该可以通过单独调用每个服务来完成其分配的任务,从而在不同时间进行签名!我没有运行这段代码,但它应该可以稍微调整一下。
推荐阅读
- algorithm - 缓存抖动效应因大数据大小而降低
- c# - Unity 复制到 Android 上的剪贴板
- python - 创建填充表单的新模型对象
- assembly - 为什么使用 ebp 比 esp 寄存器在堆栈上定位参数更好?
- amazon-web-services - 在 AWS 中使用 WaitCondtion 与创建策略
- dart - 如何防止小部件在 ListView 滚动上重新渲染
- react-native - 在 Axios React native 中传递 Array/Object 作为参数
- php - Elementor Pro 表单到 webhook 集成的示例
- python - 过滤灰度指纹扫描图像和二进制文件
- css - CSS中未对齐的复选框