在NestJS中设置更多的"jwt" AuthGuard可以通过以下步骤完成:
@nestjs/passport
和passport-jwt
这两个依赖包。你可以使用以下命令进行安装:npm install --save @nestjs/passport passport-jwt
jwt.strategy.ts
文件,并在其中定义一个JwtStrategy
类,该类将继承自passport-jwt
模块的Strategy
类。在该类的构造函数中,你需要传入一个配置对象,包括JWT的密钥和其他可选的配置项。以下是一个示例:import { Injectable, UnauthorizedException } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { AuthService } from './auth.service';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private readonly authService: AuthService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'your-secret-key',
});
}
async validate(payload: any) {
const user = await this.authService.validateUser(payload);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
在上面的示例中,jwtFromRequest
指定了从请求的Authorization
头中提取JWT令牌,secretOrKey
是用于验证签名的密钥。validate
方法用于验证JWT令牌中的用户信息,并返回用户对象。
auth.module.ts
文件中,将JwtStrategy
添加到providers
数组中,并将其作为AuthGuard
的默认策略。以下是一个示例:import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { AuthService } from './auth.service';
import { JwtStrategy } from './jwt.strategy';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
imports: [
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secret: 'your-secret-key',
signOptions: { expiresIn: '1h' },
}),
],
controllers: [UsersController],
providers: [AuthService, UsersService, JwtStrategy],
})
export class AuthModule {}
在上面的示例中,PassportModule.register
用于注册AuthGuard
的默认策略为jwt
,JwtModule.register
用于配置JWT模块的密钥和其他选项。
AuthGuard
来保护需要身份验证的路由。以下是一个示例:import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller('users')
export class UsersController {
@Get()
@UseGuards(AuthGuard())
findAll() {
// 处理需要身份验证的路由逻辑
}
}
在上面的示例中,@UseGuards(AuthGuard())
装饰器将AuthGuard
应用于findAll
方法,以确保只有经过身份验证的用户才能访问该路由。
这样,你就可以在NestJS中设置更多的"jwt" AuthGuard了。请注意,上述示例中的密钥和配置仅供参考,你应该根据自己的需求进行相应的配置。另外,这里没有提及具体的腾讯云产品和链接地址,你可以根据自己的需求选择适合的腾讯云产品来实现JWT身份验证。
领取专属 10元无门槛券
手把手带您无忧上云