何时在NestJs中使用防护以及何时使用中间件

编程入门 行业动态 更新时间:2024-10-07 09:25:14

何时在NestJs中使用防护以及何时使用<a href=https://www.elefans.com/category/jswz/34/1771157.html style=中间件"/>

何时在NestJs中使用防护以及何时使用中间件

我想创建一个NestJs应用,并希望有一个中间件来验证请求对象中的令牌,并且要有一个验证卫士来验证令牌有效载荷中的用户。

通过拆分,我希望进行彻底的分离。首先是我的中间件

@Injectable()
export class TokenMiddleware implements NestMiddleware {
  use(req: any, res: Response, next: NextFunction) {
    try {
      const headers: IncomingHttpHeaders = req.headers;
      const authorization: string = headers.authorization;
      const bearerToken: string[] = authorization.split(' ');
      const token: string = bearerToken[1];

      // !! Check if token was invalidated !!

      req.token = token;
      req.tokenPayload = verifyToken(token);
      next();
    } catch (error) {
      throw new UnauthorizedException();
    }
  }
}

它仅验证令牌,并使用编码的令牌及其有效载荷扩展请求对象。我的身份验证管理员

@Injectable()
export class AuthenticationGuard implements CanActivate {
  constructor(private readonly usersService: UsersService) {}

  async canActivate(context: ExecutionContext): Promise<boolean> {
    const request: any = context.switchToHttp().getRequest();

    try {
      const user: any = request.tokenPayload;

      if (!user) {
        throw new Error();
      }

      const findByIdDTO: FindByIdDTO = { id: user.id };
      const existingUser: UserRO = await this.usersService.findById(findByIdDTO);

      if (!existingUser) {
        throw new Error();
      }

      // attach the user to the request object?

      return true;
    } catch (error) {
      throw new UnauthorizedException();
    }
  }
}

此防护程序检查令牌有效载荷中提供的用户是否有效。如果一切正常,我应该在哪里将用户附加到请求对象?据我所知,警卫只会检查是否正确。但是我不想将所有这些逻辑保留在令牌中间件中。在auth Guard中完成验证后,在哪里可以将数据库用户附加到请求?

回答如下:

[如果您想做类似于Passport的操作,则可以始终将用户附加到req.user,这在Node.JS世界中被视为非常标准的标准。

为您提供的另一个问题:是否有没有两个后卫立即接班的后卫?有一个警卫人员检查令牌是否存在并且确实是有效令牌,并且有一个用于验证令牌中的用户确实有效的令牌。这样,您就无需使用中间件(出于兼容性的考虑,通常将其包括在内),并且仍然具有独立的逻辑。

更多推荐

何时在NestJs中使用防护以及何时使用中间件

本文发布于:2024-05-06 18:28:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753663.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中间件   防护   NestJs

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!