Nest.js 的守卫 (Guard) 是什么?

推荐答案

Nest.js 的守卫(Guard)是一种用于在请求处理之前进行条件判断的机制。守卫的主要作用是决定是否允许某个请求继续执行。它通常用于实现权限验证、角色检查等场景。守卫可以应用于控制器级别、路由级别或全局级别。

守卫通过实现 CanActivate 接口来定义,该接口包含一个 canActivate 方法。该方法接收 ExecutionContext 对象作为参数,返回一个布尔值或一个 Promise<boolean>。如果返回 true,请求将继续执行;如果返回 false,请求将被拒绝。

本题详细解读

守卫的作用

守卫的主要作用是在请求到达控制器之前进行条件判断。它可以用于多种场景,例如:

  • 验证用户是否已登录
  • 检查用户是否具有访问某个资源的权限
  • 根据请求的某些属性(如 IP 地址)决定是否允许请求继续

守卫的实现

要实现一个守卫,首先需要创建一个类并实现 CanActivate 接口。CanActivate 接口要求实现 canActivate 方法,该方法接收 ExecutionContext 对象作为参数,并返回一个布尔值或一个 Promise<boolean>

-- -------------------- ---- -------
------ - ----------- ------------ ---------------- - ---- -----------------

-------------
------ ----- --------- ---------- ----------- -
  -------------------- ------------------ ------- - ---------------- -
    ----- ------- - ------------------------------------
    -- ---------
    ------ ------------------------------
  -

  ------- ------------------------ ----- ------- -
    -- ---------
    ------ ----- -- - -----
  -
-

守卫的应用

守卫可以通过装饰器 @UseGuards 应用到控制器或路由上。例如:

-- -------------------- ---- -------
------ - ----------- ---- --------- - ---- -----------------
------ - --------- - ---- ---------------

-------------------
---------------------
------ ----- -------------- -
  ------
  ---------- ------ -
    ------ ----- ------ ------- --- ------
  -
-

全局守卫

守卫还可以通过 app.useGlobalGuards 方法应用到整个应用程序中:

-- -------------------- ---- -------
------ - ----------- - ---- ---------------
------ - --------- - ---- ---------------
------ - --------- - ---- ---------------

----- -------- ----------- -
  ----- --- - ----- ------------------------------
  ----------------------- -------------
  ----- -----------------
-
------------

总结

守卫是 Nest.js 中用于在请求处理之前进行条件判断的机制。通过实现 CanActivate 接口,开发者可以自定义守卫的逻辑,并将其应用到控制器、路由或全局范围。守卫在权限验证、角色检查等场景中非常有用。

纠错
反馈