jwtservice.sign 如何录入用户ID和用户名 验证时如何解析出来
时间: 2024-03-20 12:38:37 浏览: 84
在JWTServie的sign()方法中,可以通过传递一个包含用户ID和用户名的payload对象,将这些信息添加到JWT中。例如,可以按照以下方式使用JWTServie的sign()方法生成JWT:
```
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 = { userId: user.id, username: user.username };
return {
access_token: this.jwtService.sign(payload),
};
}
}
```
在这个例子中,当用户登录时,会生成一个包含用户ID和用户名的payload对象。然后,使用JWTServie的sign()方法,将这个payload对象加密成一个JWT字符串,并将其作为登录成功后返回给客户端的access_token属性。当客户端在后续的请求中携带这个access_token时,服务器就可以解密出其中的用户ID和用户名,用于进行身份验证。
在JWT验证时,可以通过使用JWTServie的verify()方法解密JWT,并获取其中的用户ID和用户名。例如,可以按照以下方式进行验证:
```
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AuthService {
constructor(private readonly jwtService: JwtService) {}
async validateUser(token: string) {
try {
const decoded = this.jwtService.verify(token);
return { userId: decoded.userId, username: decoded.username };
} catch (err) {
throw new HttpException('Invalid token', HttpStatus.UNAUTHORIZED);
}
}
}
```
在这个例子中,使用JWTServie的verify()方法对JWT进行验证,并将解密出来的用户ID和用户名返回。如果JWT验证失败,则抛出一个HttpException异常。在返回的对象中,包含了userId和username两个属性,用于在后续的请求中进行用户身份验证。
阅读全文