jwt.sign怎么使用例子
时间: 2023-11-06 15:57:30 浏览: 42
以下是一个使用jsonwebtoken库中的jwt.sign方法的例子:
```
const jwt = require('jsonwebtoken');
const payload = {
id: 123,
name: 'John Doe',
role: 'admin'
};
const secretKey = 'mysecretkey';
const options = {
expiresIn: '1h'
};
const token = jwt.sign(payload, secretKey, options);
console.log(token);
```
在上面的例子中,我们首先定义了要编码的payload对象,该对象包含一些用户数据。然后我们定义了一个秘密密钥来加密payload数据,并设置了一个过期时间选项,使令牌在1小时后过期。最后,我们使用jwt.sign方法将payload编码为JWT令牌,并将其存储在token变量中。最后,我们使用console.log打印出JWT令牌。
相关问题
jwtservice.sign 如何录入用户ID和用户名 验证时如何解析出来
在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两个属性,用于在后续的请求中进行用户身份验证。
jwtservice.sign 如何录入用户ID和用户名 在策略中如何解析出来
在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验证策略中,可以通过解码JWT的payload,获取其中的userId和username属性,用于进行身份验证。例如,可以按照以下方式进行验证:
```
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { AuthService } from './auth.service';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: 'secret-key',
});
}
async validate(payload: any) {
return { userId: payload.userId, username: payload.username };
}
}
```
在这个例子中,使用Passport-JWT库的Strategy和PassportStrategy类,实现了一个JWT验证策略。在构造函数中,使用ExtractJwt.fromAuthHeaderAsBearerToken()方法从请求头中提取JWT字符串,并使用secret-key作为加密密钥。在validate()方法中,解析出JWT的payload,并将其中的userId和username属性返回。这样,在后续的请求中,就可以从请求对象的user属性中获取到这些信息,用于进行用户身份验证。