2

我有护照当地警卫:

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;
  }
}

我为谷歌身份验证实现了保护,例如:

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 来验证访问令牌来实现保护,因为我看到护照没有类似于仅验证访问令牌的东西。
Withrequest.login() express-session被创建并存储在redis中,一切都很好。

我只是不明白这个 request.login() 来自哪里?

什么增加了它,护照(我不在这个警卫中使用它),nestjs 或 session-express。

4

1 回答 1

0

passport是将login()方法添加到请求对象的原因。不管你是否在守卫中使用它,请求对象仍然被护照修改过,所以它有这个login方法。它用于使用您选择的会话存储创建会话。关于 Nest、passport 之间的集成以及如何在 dev.to 上创建基于会话的身份验证系统,我有一篇不错的文章,这可能有助于阐明 NestJS 和 passport 的幕后情况。

于 2022-01-06T03:42:30.043 回答