JwtStrategy
时间: 2023-12-29 22:04:28 浏览: 197
`JwtStrategy` 是 `@nestjs/passport` 中的一个认证策略,用于验证基于 JSON Web Token(JWT)的身份验证。
使用 `JwtStrategy` 需要安装 `@nestjs/jwt` 和 `passport-jwt` 这两个包。
首先,您需要在 `AuthModule` 中注册 `JwtModule`,并配置 `JwtService`:
```typescript
import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { AuthService } from './auth.service';
import { JwtStrategy } from './jwt.strategy';
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: 'your-secret-key',
signOptions: { expiresIn: '1d' },
}),
],
providers: [AuthService, JwtStrategy],
})
export class AuthModule {}
```
在上面的代码中,我们使用 `JwtModule.register` 方法注册 `JwtService`,并使用 `secret` 和 `expiresIn` 配置 JWT。
然后,我们可以创建一个 `JwtStrategy` 类来验证 JWT:
```typescript
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy, ExtractJwt } from 'passport-jwt';
import { AuthService } from './auth.service';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'your-secret-key',
});
}
async validate(payload: any) {
return this.authService.validateUserById(payload.sub);
}
}
```
在上面的代码中,我们创建了一个 `JwtStrategy` 类,继承自 `PassportStrategy`,并使用 `passport-jwt` 策略。在 `JwtStrategy` 类中,我们实现了 `validate` 方法,用于校验 JWT。`passport-jwt` 会自动将 JWT 解析为 `payload`,我们可以从中获取用户信息,并通过 `this.authService.validateUserById` 方法验证用户是否存在。
最后,在 `AuthController` 中添加一个测试接口:
```typescript
import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller('auth')
export class AuthController {
constructor(private authService: AuthService) {}
@UseGuards(AuthGuard('jwt'))
@Get('profile')
getProfile(@Request() req) {
return req.user;
}
}
```
在上面的代码中,我们使用 `@UseGuards(AuthGuard('jwt'))` 装饰器来指定使用 `jwt` 策略进行验证。在 `getProfile` 方法中,我们可以通过 `req.user` 获取到验证通过的用户信息。
以上就是使用 `JwtStrategy` 进行身份验证的基本流程。当然,在实际应用中,您还需要处理 JWT 的生成和校验,以及用户的登录和注册等逻辑。
阅读全文