Nest.js 中 @UseGuards 装饰器的作用是什么?

推荐答案

@UseGuards 装饰器用于在 Nest.js 中应用守卫(Guards)。守卫的主要作用是决定是否允许请求继续执行。它们通常用于实现身份验证和授权逻辑。通过在控制器或路由处理程序上使用 @UseGuards,你可以将守卫应用到特定的路由或整个控制器。

本题详细解读

1. 守卫的作用

守卫是 Nest.js 中的一种特殊组件,用于在请求到达路由处理程序之前执行一些逻辑。守卫的主要职责是决定是否允许请求继续执行。常见的用例包括:

  • 身份验证:验证用户是否已登录。
  • 授权:检查用户是否有权限访问特定资源。

2. @UseGuards 的使用方式

@UseGuards 装饰器可以应用在控制器类或单个路由处理程序上。它可以接受一个或多个守卫类或实例。

在控制器上使用

在这个例子中,AuthGuard 会应用到 CatsController 中的所有路由。

在路由处理程序上使用

在这个例子中,AuthGuard 只会应用到 findAll 方法上。

3. 自定义守卫

你可以通过实现 CanActivate 接口来创建自定义守卫。例如:

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

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

4. 多个守卫

你可以将多个守卫传递给 @UseGuards,它们会按顺序执行:

在这个例子中,AuthGuardRolesGuard 会依次执行,只有所有守卫都通过时,请求才会继续执行。

5. 全局守卫

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

这种方式会将守卫应用到所有的路由处理程序。

纠错
反馈