在NestJS中选择正确的JWT策略,Passport策略可以通过以下几个步骤来实现:
@nestjs/passport
和passport-jwt
这两个依赖包。PassportModule
和JwtModule
,并在imports
数组中引入这两个模块。import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: 'your_secret_key',
signOptions: { expiresIn: '1h' },
}),
],
})
export class AppModule {}
JwtStrategy
类,继承自PassportStrategy
,并实现validate
方法。在validate
方法中,你可以验证JWT的有效性,并返回解码后的用户信息。import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy, ExtractJwt } from 'passport-jwt';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'your_secret_key',
});
}
async validate(payload: any) {
return { userId: payload.sub, username: payload.username };
}
}
@UseGuards
装饰器将JwtAuthGuard
应用到需要进行JWT验证的路由上。import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from './jwt-auth.guard';
@Controller('users')
export class UsersController {
@Get()
@UseGuards(JwtAuthGuard)
findAll() {
// 处理需要验证的路由逻辑
}
}
app.use()
方法将Passport中间件应用到应用程序中。import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
这样,当请求到达需要进行JWT验证的路由时,Passport策略会自动验证JWT的有效性,并将解码后的用户信息注入到请求对象中,你可以在路由处理函数中使用该信息进行后续操作。
关于JWT策略的更多信息,你可以参考腾讯云的相关产品:腾讯云JWT鉴权。
企业创新在线学堂
算法大赛
618音视频通信直播系列
数字化产业研学汇第三期
腾讯技术创作特训营
“中小企业”在线学堂
腾讯云GAME-TECH沙龙
领取专属 10元无门槛券
手把手带您无忧上云