Nest.js 中如何在路由级别应用守卫?

推荐答案

在 Nest.js 中,可以通过在控制器或路由处理程序上使用 @UseGuards() 装饰器来应用守卫。守卫可以用于路由级别,以控制请求是否应该被处理。

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

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

在这个例子中,AuthGuard 被应用到了 getProtectedResource 路由上,只有通过守卫的请求才能访问该路由。

本题详细解读

守卫的作用

守卫(Guards)是 Nest.js 中的一种特殊组件,主要用于在请求到达路由处理程序之前执行一些逻辑。守卫通常用于身份验证和授权,确保只有符合条件的请求才能继续处理。

路由级别应用守卫

在 Nest.js 中,守卫可以应用在控制器级别或路由级别。通过在路由处理程序上使用 @UseGuards() 装饰器,可以将守卫应用到特定的路由上。

1. 创建守卫

首先,你需要创建一个守卫类。守卫类需要实现 CanActivate 接口,并实现 canActivate 方法。该方法返回一个布尔值或一个 Promise<boolean>,表示请求是否应该被允许继续。

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

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

2. 应用守卫

在控制器或路由处理程序上使用 @UseGuards() 装饰器来应用守卫。

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

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

在这个例子中,AuthGuard 被应用到了 getProtectedResource 路由上。只有当 canActivate 方法返回 true 时,请求才会被允许继续处理。

全局守卫

如果你希望将守卫应用到所有路由,可以在模块级别使用 APP_GUARD 提供者。

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

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

这样,AuthGuard 将会应用到所有的路由上。

纠错
反馈