nestjs 用户身份验证 功能实现
时间: 2024-02-10 14:11:48 浏览: 71
在 NestJS 中实现用户身份验证需要经过以下几个步骤:
1. 安装相关依赖:如果你选择使用 Passport.js 进行身份验证,你需要安装 `@nestjs/passport` 和 `passport` 两个依赖。如果你使用其他身份验证方式,需要安装相应的依赖。
2. 创建身份验证策略:根据你的身份验证需求,创建相应的身份验证策略。如果你使用 Passport.js,你可以使用 `@nestjs/passport` 提供的 `PassportStrategy` 类来创建策略。例如,如果你要使用本地验证策略,可以创建一个 `LocalStrategy` 类来实现:
```
import { Strategy } from 'passport-local';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable } from '@nestjs/common';
import { AuthService } from './auth.service';
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super();
}
async validate(username: string, password: string): Promise<any> {
const user = await this.authService.validateUser(username, password);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
```
在这个例子中,我们创建了一个 `LocalStrategy` 类,继承了 Passport.js 提供的 `Strategy` 类。`LocalStrategy` 类需要实现 `validate` 方法来验证用户身份,如果验证成功,返回用户信息。
3. 创建身份验证模块:如果你使用 Passport.js 进行身份验证,你需要创建一个身份验证模块来注册策略和配置 Passport.js。例如:
```
import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { LocalStrategy } from './local.strategy';
import { AuthService } from './auth.service';
@Module({
imports: [PassportModule],
providers: [LocalStrategy, AuthService],
})
export class AuthModule {}
```
在这个例子中,我们创建了一个 `AuthModule` 模块,并在其中引入了 `PassportModule`,注册了 `LocalStrategy` 策略和 `AuthService` 服务。
4. 在路由中使用身份验证:在需要进行身份验证的路由中,使用 `AuthGuard` 或 `JwtAuthGuard` 中间件来进行身份验证。例如:
```
import { Controller, UseGuards, Post, Request } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller()
export class AppController {
@UseGuards(AuthGuard('local'))
@Post('auth/login')
async login(@Request() req) {
return req.user;
}
}
```
在这个例子中,我们在 `login` 路由中使用了 `AuthGuard` 中间件来进行本地验证身份验证。如果身份验证通过,`req.user` 中会包含用户信息。
这些步骤只是一个简单的示例,具体实现可能会有所不同,你需要根据自己的实际需求进行调整。
阅读全文