我有 Passport 本地守卫:
export class LocalGuard extends AuthGuard('local') {
async canActivate(context: ExecutionContext): Promise<boolean> {
const result = (await super.canActivate(context)) as boolean;
await super.logIn(context.switchToHttp().getRequest());
return result;
}
}
我为 google auth 实现了保护,例如:
export class GoogleAuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
){
const req = context.switchToHttp().getRequest();
// get access token from request...
const user = // validate against google api
request.login(user, (err) => {});
return true;
}
}
我通过直接调用 google api 来验证访问 token 来实现保护,因为我发现 Passport 没有类似于验证访问 token 的东西。
使用 request.login()
express-session
创建并存储在 redis 中,一切都很好。
我只是不明白这个 request.login() 是从哪里来的?
添加什么,passport(我在这个守卫里没用),nestjs或者session-express。
最佳答案
passport
是什么将 login()
方法添加到请求对象。不管你用不在guard里面,request对象还是被passport修改过的,所以才有这个login
方法。它用于使用您选择的 session 存储创建 session 。 I've got a decent write-up of the integration between Nest, passport, and how to create a session based authentication system on dev.to这可能有助于阐明 NestJS 和 Passport 的幕后情况。
关于typescript - nestjs中添加什么request.login,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70507226/