nestjs 返回的token 前端如何获取
时间: 2024-03-20 14:40:09 浏览: 155
nestjs-mysql-api:nestjs + mysql 后端,配套前端https
您可以在 NestJS 中使用 `@nestjs/jwt` 模块来生成 JWT 令牌并将其发送给客户端。在客户端,您可以将令牌存储在本地存储或会话存储中,以便将来使用。
以下是一些示例代码:
首先,您需要在 NestJS 中安装 `@nestjs/jwt` 模块,您可以使用以下命令:
```
npm install --save @nestjs/jwt
```
然后,您可以在您的身份验证服务中使用 JwtService 创建 JWT 令牌。在以下示例中,我们将在 `AuthService` 中创建一个名为 `login` 的方法,该方法将验证用户凭据并生成 JWT 令牌:
```typescript
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AuthService {
constructor(private readonly jwtService: JwtService) {}
async login(user: any) {
const payload = { username: user.username, sub: user.userId };
return {
access_token: this.jwtService.sign(payload),
};
}
}
```
在上面的代码中,我们使用 `JwtService` 来签署 JWT 令牌。我们传递一个负载对象,其中包含要在令牌中存储的数据。在这个例子中,我们存储了用户名和用户 ID。
接下来,在您的身份验证控制器中,您可以使用 `AuthService` 中的 `login` 方法来验证用户凭据并返回 JWT 令牌:
```typescript
import { Controller, Post, Request, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { AuthService } from './auth.service';
@Controller()
export class AuthController {
constructor(private readonly authService: AuthService) {}
@UseGuards(AuthGuard('local'))
@Post('auth/login')
async login(@Request() req) {
return this.authService.login(req.user);
}
}
```
在上面的代码中,我们使用 `@UseGuards(AuthGuard('local'))` 装饰器来保护路由,并在处理程序中访问已解析的用户信息。我们然后将用户信息传递给 `AuthService` 中的 `login` 方法,该方法将生成 JWT 令牌,并将其包含在响应中返回。
最后,在您的客户端代码中,您可以使用浏览器的本地存储或会话存储来存储 JWT 令牌。以下是一个示例:
```typescript
const response = await axios.post('/auth/login', {
username: 'john',
password: 'changeme',
});
localStorage.setItem('access_token', response.data.access_token);
```
在上面的代码中,我们使用 Axios 发送 POST 请求来登录用户。在响应中,我们从 `response.data` 中获取 JWT 令牌,并将其存储在本地存储中。您可以在以后的请求中使用该令牌来验证用户的身份。
阅读全文