Nest.js 在护照本地策略中获取请求标头
Posted
技术标签:
【中文标题】Nest.js 在护照本地策略中获取请求标头【英文标题】:Nest.js get request header in passport local strategy 【发布时间】:2021-09-11 17:49:46 【问题描述】:如何在护照本地策略中获取请求标头? 我需要为每个实体使用一个单独的数据库,使用 mongodb,所以我需要一种在身份验证之前获取子域的方法,以确定我应该连接到的数据库
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy)
constructor(private authService: AuthService)
super( usernameField: 'email' )
async validate(email: string, password: string, headers:Headers): Promise<IUser>
//** this is what I want to have
//** const subdomain = headers.host.split(".")[0]
const user = await this.authService.validateUser( email, password ,//** subdomain)
if (!user)
throw new UnauthorizedException()
return user
【问题讨论】:
【参考方案1】:您需要将passReqToCallback: true
添加到构造函数中的super
调用中。这将使req
成为validate
的第一个参数,因此您可以执行类似的操作
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy)
constructor(private authService: AuthService)
super( usernameField: 'email', passReqToCallback: true )
async validate(req: Request, email: string, password: string, headers:Headers): Promise<IUser>
const subdomain = req.headers.host.split(".")[0];
const user = await this.authService.validateUser( email, password ,//** subdomain)
if (!user)
throw new UnauthorizedException()
return user
【讨论】:
以上是关于Nest.js 在护照本地策略中获取请求标头的主要内容,如果未能解决你的问题,请参考以下文章
使用promisy重构护照本地策略。 .catch()的问题