Nestjs:JwtStrategy 的方法不起作用
Nestjs: the methode of JwtStrategy doesn't work
我正在尝试在 nest 中使用 jwt
一切正常,但验证功能在 jwt.strategy.ts
中不起作用
这是我的 jwt.strategy.ts:
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(
private userService:UserService
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey:"mysecretkey",
});
}
async validate(payload:any) {
console.log('this is payload'+payload)
它打印:this is payload undefine
user.modul
@Module({
exports:[UserService],
controllers: [UserController],
providers: [UserService,JwtStrategy],
imports : [TypeOrmModule.forFeature([UserEntity]),PassportModule.register(
{defaultStrategy:'jwt'}),
JwtModule.register({secret:'mysecretkey',signOptions:{expiresIn:3600000}})]
})
export class UserModule {}
当我在邮递员中请求时,我得到 satus:401 Unauthorized 并且在 termenal show : payload undefined
如果您还没有,那么您必须定义扩展内置 AuthGuard 的 JwtAuthGuard class。
//jwt-auth.guard.ts
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
然后,您可以实现受保护的路由及其关联的Guard。
喜欢,
@UseGuards(JwtAuthGuard)
@Get('profile')
getProfile(@Request() req) {
return req.user;
}
编辑:
每次创建新用户都需要生成userToken。 Return 此 userToken 响应 CreateUser API 可由前端使用。此外,生成的 userToken 应在需要时用于 API 请求。
在您的 UserService 中注入此 AuthService class 并调用此方法生成 jwt 令牌。
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AuthService {
constructor(private readonly jwtService: JwtService) {}
getJwtToken(userId: number, phone: string) {
const payload = { userId: userId, userPhone: phone }; //Set whatever data you need to keep in your jwt
return this.jwtService.sign(payload);
}
}
我也遇到了这个错误。
在我的例子中,我使用这样的 secretOrKey:process.env.PRIVATE_KEY || 'SECRET'
而且我发现在 JwtStrategy(扩展了 PassportStrategy(Strategy))中使用了 process.env.PRIVATE_KEY,但是在 JwtModule.register({secret: process.env.PRIVATE_KEY || 'SECRET', ...}) 被使用 'SECRET'!
检查你的密钥。
我正在尝试在 nest 中使用 jwt 一切正常,但验证功能在 jwt.strategy.ts
中不起作用这是我的 jwt.strategy.ts:
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(
private userService:UserService
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey:"mysecretkey",
});
}
async validate(payload:any) {
console.log('this is payload'+payload)
它打印:this is payload undefine
user.modul
@Module({
exports:[UserService],
controllers: [UserController],
providers: [UserService,JwtStrategy],
imports : [TypeOrmModule.forFeature([UserEntity]),PassportModule.register(
{defaultStrategy:'jwt'}),
JwtModule.register({secret:'mysecretkey',signOptions:{expiresIn:3600000}})]
})
export class UserModule {}
当我在邮递员中请求时,我得到 satus:401 Unauthorized 并且在 termenal show : payload undefined
如果您还没有,那么您必须定义扩展内置 AuthGuard 的 JwtAuthGuard class。
//jwt-auth.guard.ts
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
然后,您可以实现受保护的路由及其关联的Guard。 喜欢,
@UseGuards(JwtAuthGuard)
@Get('profile')
getProfile(@Request() req) {
return req.user;
}
编辑:
每次创建新用户都需要生成userToken。 Return 此 userToken 响应 CreateUser API 可由前端使用。此外,生成的 userToken 应在需要时用于 API 请求。
在您的 UserService 中注入此 AuthService class 并调用此方法生成 jwt 令牌。
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AuthService {
constructor(private readonly jwtService: JwtService) {}
getJwtToken(userId: number, phone: string) {
const payload = { userId: userId, userPhone: phone }; //Set whatever data you need to keep in your jwt
return this.jwtService.sign(payload);
}
}
我也遇到了这个错误。 在我的例子中,我使用这样的 secretOrKey:process.env.PRIVATE_KEY || 'SECRET'
而且我发现在 JwtStrategy(扩展了 PassportStrategy(Strategy))中使用了 process.env.PRIVATE_KEY,但是在 JwtModule.register({secret: process.env.PRIVATE_KEY || 'SECRET', ...}) 被使用 'SECRET'!
检查你的密钥。