//jwt.strategy.ts ... import { ConfigService } from '@nestjs/config'; import { UnauthorizedException } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { StrategyOptions, Strategy, ExtractJwt } from 'passport-jwt'; export class JwtStorage extends PassportStrategy(Strategy) { constructor( @InjectRepository(User) private readonly userRepository: Repository<User>, private readonly configService: ConfigService, private readonly authService: AuthService, ) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: configService.get('SECRET'), } as StrategyOptions); } async validate(user: User) { const existUser = await this.authService.getUser(user); if (!existUser) { throw new UnauthorizedException('token不正确'); } return existUser; } }
时间: 2024-04-20 16:27:24 浏览: 129
这是一个 Nest.js 中用于 JWT 鉴权的策略。它使用了 `passport-jwt` 模块来从请求的 Authorization 头部中提取 JWT Token,并使用 Nest.js 的 ConfigService 来获取应用程序的密钥。在 validate 方法中,它首先调用了 AuthService 的 getUser 方法来获取用户信息,并将其与传入的 user 参数进行比较,如果不匹配则抛出 UnauthorizedException。最后,如果验证通过,它将返回存在的用户信息。
相关问题
import { ExtractJwt, Strategy } from 'passport-jwt'; import { PassportStrategy } from '@nestjs/passport'; import { Injectable } from '@nestjs/common'; import { jwtConstants } from './constants'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { constructor() { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, secretOrKey: jwtConstants.secret, }); } async validate(payload: any) { return { userId: payload.sub, username: payload.username }; } }
这是一个使用Passport和JWT进行用户认证的策略类。其中,Passport是一个用于Node.js应用程序的身份验证中间件,JWT是一个用于Web应用程序的开放标准。在这个策略类中,使用Passport提供的PassportStrategy类继承了JWTStrategy类,并将其用作Passport的身份验证策略。
在constructor()方法中,使用super()调用父类的构造函数,并传入了一个包含jwtFromRequest、ignoreExpiration和secretOrKey属性的对象。其中,jwtFromRequest用于指定从哪里获取JWT,这里使用了从请求头中获取Bearer Token的方式;ignoreExpiration指定是否忽略JWT的过期时间;secretOrKey指定用于签名和验证JWT的密钥或公钥。
在validate()方法中,使用传入的payload参数,即从JWT中解码出的数据,生成一个包含userId和username属性的对象,并作为认证成功的返回值。这个方法由Passport调用,用于验证用户的身份。如果验证成功,Passport会将用户信息添加到请求对象的user属性中,供后续的请求使用。
阅读全文