nestjs 登录注册API实现
时间: 2023-07-11 11:25:59 浏览: 180
node.js实现登录注册页面
首先,你需要安装 `@nestjs/passport`, `passport-local`, `@nestjs/jwt` 和 `bcryptjs` 这四个依赖项。
然后,在你的 `auth` 模块中,创建一个 `auth.service.ts` 文件,实现登录和注册的功能。以下是一个简单的示例:
```typescript
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { compareSync } from 'bcryptjs';
import { UserService } from '../user/user.service';
@Injectable()
export class AuthService {
constructor(
private readonly userService: UserService,
private readonly jwtService: JwtService,
) {}
async validateUser(username: string, password: string): Promise<any> {
const user = await this.userService.findOneByUsername(username);
if (user && compareSync(password, user.password)) {
const { password, ...result } = user;
return result;
}
return null;
}
async login(user: any): Promise<any> {
const payload = { username: user.username, sub: user.userId };
return {
access_token: this.jwtService.sign(payload),
};
}
async register(user: any): Promise<any> {
const createdUser = await this.userService.create(user);
const { password, ...result } = createdUser;
const payload = { username: createdUser.username, sub: createdUser.userId };
return {
access_token: this.jwtService.sign(payload),
...result,
};
}
}
```
在上面的代码中,`validateUser()` 方法用于验证用户的凭据是否正确,`login()` 方法用于生成 JWT token,`register()` 方法用于创建新用户并生成 JWT token。
接下来,在 `auth` 模块中,创建一个 `auth.controller.ts` 文件,实现登录和注册的 API 接口。以下是一个简单的示例:
```typescript
import { Body, Controller, Post, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { AuthService } from './auth.service';
import { LocalAuthGuard } from './local-auth.guard';
@Controller('auth')
export class AuthController {
constructor(private readonly authService: AuthService) {}
@UseGuards(LocalAuthGuard)
@Post('login')
async login(@Body() user: any) {
return this.authService.login(user);
}
@Post('register')
async register(@Body() user: any) {
return this.authService.register(user);
}
}
```
在上面的代码中,`@UseGuards(LocalAuthGuard)` 表示使用本地验证策略,即使用 `LocalAuthGuard` 中间件来验证用户的凭据是否正确,`@Post('login')` 表示这是一个登录接口,`@Post('register')` 表示这是一个注册接口。
最后,在 `auth` 模块中,创建一个 `local-auth.guard.ts` 文件,实现本地验证策略。以下是一个简单的示例:
```typescript
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class LocalAuthGuard extends AuthGuard('local') {}
```
在上面的代码中,`LocalAuthGuard` 继承自 `AuthGuard`,并指定使用 `local` 策略进行验证。
完成以上步骤后,你就可以使用 `POST /auth/login` 和 `POST /auth/register` 接口来实现登录和注册了。
阅读全文