nestjs 使用jwt
时间: 2024-03-28 18:35:58 浏览: 94
nestjs是一个基于Node.js的开发框架,它提供了一种简单而强大的方式来构建高效、可扩展的服务器端应用程序。而JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,它可以在客户端和服务器之间安全地传输信息。
在nestjs中使用JWT进行身份验证和授权非常简单。下面是使用nestjs中的jwt模块进行身份验证和授权的基本步骤:
1. 首先,安装`@nestjs/jwt`模块。可以使用npm或者yarn进行安装:
```
npm install --save @nestjs/jwt
```
2. 在nestjs的模块中导入`JwtModule`并配置密钥和其他选项。在`app.module.ts`文件中添加以下代码:
```javascript
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
@Module({
imports: [
JwtModule.register({
secret: 'your-secret-key', // 密钥,用于签署和验证token
signOptions: { expiresIn: '1h' }, // token的过期时间
}),
],
})
export class AppModule {}
```
3. 创建一个`AuthService`服务,用于生成和验证JWT。在`auth.service.ts`文件中添加以下代码:
```javascript
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AuthService {
constructor(private readonly jwtService: JwtService) {}
async generateToken(payload: any): Promise<string> {
return this.jwtService.sign(payload);
}
async verifyToken(token: string): Promise<any> {
return this.jwtService.verify(token);
}
}
```
4. 在需要进行身份验证和授权的地方使用`AuthService`服务。例如,在一个控制器中,可以使用`@UseGuards`装饰器和`AuthGuard`守卫来保护路由。在`auth.controller.ts`文件中添加以下代码:
```javascript
import { Controller, Post, UseGuards, Request } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { AuthService } from './auth.service';
@Controller('auth')
export class AuthController {
constructor(private readonly authService: AuthService) {}
@Post('login')
async login(@Request() req) {
// 在这里进行用户身份验证,验证通过后生成token
const token = await this.authService.generateToken({ username: req.body.username });
return { token };
}
@Post('protected')
@UseGuards(AuthGuard()) // 使用AuthGuard守卫保护路由
async protectedRoute() {
// 在这里进行授权操作
return 'This route is protected';
}
}
```
这样,你就可以使用nestjs和jwt模块进行身份验证和授权了。当用户登录成功后,会生成一个JWT token,并在后续请求中使用该token进行授权。
希望以上信息对你有帮助!如果你还有其他问题,请继续提问。
阅读全文