[NestJs] 守卫(Guard)的使用

什么是守卫

守卫(Guard)是一种特殊类型的中间件,用于保护路由并控制谁可以访问某个路由。守卫类似于中间件,但具有更特定的功能,用于处理路由级别的授权和认证。通过使用守卫,您可以实现诸如身份验证、授权和自定义逻辑等操作,以确定是否允许访问特定的路由或控制器方法。

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

@Injectable()
export class AuthGuard implements CanActivate {
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    const request = context.switchToHttp().getRequest();
    const authHeader = request.headers.authorization;
    if (!authHeader) {
      return false;
    }
    return true;
  }
}

在上面的示例中,我们创建了一个名为AuthGuard的守卫。该守卫实现了CanActivate接口,该接口定义了canActivate()方法,该方法用于确定是否允许访问特定的路由或控制器方法。

canActivate()方法中,我们首先从请求头中获取认证信息(authHeader)。然后,我们可以添加自定义的认证逻辑,例如验证认证信息是否有效。
上面代码我们简单地检查请求中是否包含认证信息。如果认证通过,我们返回true表示允许访问;否则,返回false表示不允许访问。

要使用此守卫,您需要将其添加到特定的路由或控制器上。例如,如果您有一个名为UserController的控制器,并且您希望限制对该控制器的访问权限,则可以在控制器上添加@UseGuards(AuthGuard)装饰器:

import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from './auth.guard';

@Controller('users')
export class UserController {
  @Get()
  @UseGuards(AuthGuard)
  findAll() {
  	return 'add data'
  }
}

这样在我们使用Get方法访问/users是如果请求中没有包含认证信息则不会返回数据

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值