📌  相关文章
📜  nestjs 在守卫中获取请求标头 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:44:34.103000             🧑  作者: Mango

在nestjs守卫中获取请求标头

在nestjs中,你可以通过自定义守卫来保护路由。守卫是一个带有一些方法的类,用于检查请求是否满足该路由的要求。

在某些情况下,您可能需要访问请求头(例如,Authorization头)中的一些信息来对路由进行更精细的控制。在本文中,我们将介绍如何在nestjs的守卫中获取请求标头。

实现自定义守卫

首先,我们需要实现一个守卫。守卫是一个类,可以通过@Injectable()装饰器来注入其他组件。

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class MyGuard implements CanActivate {
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    return true;
  }
}

上面的代码创建了一个名为MyGuard的守卫,实现了CanActivate接口,该接口有一个canActivate()方法,用于检查是否可以激活路由。 在这个例子中,我们仅返回了true,表示路由总是可以访问的。

访问请求头

要访问请求头,我们需要从当前执行上下文中获取Request对象。可以使用ExecutionContextswitchToHttp()方法来获得HTTP上下文。

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class MyGuard implements CanActivate {
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    const request = context.switchToHttp().getRequest();
    const authorization = request.headers['authorization'];
    console.log(authorization);
    return true;
  }
}

上述代码中,我们从context中获取了Request对象,然后访问headers属性以获取Authorization头的值,并将其记录到控制台上。

现在您可以将守卫添加到您想要保护的路由上,并访问请求头了。

总结

在nestjs中,我们可以通过自定义守卫来保护路由。 要访问请求头,请使用ExecutionContextswitchToHttp()方法来获得Request对象。 然后,您可以使用headers属性来访问请求头的值。