推荐答案
在 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
将会应用到所有的路由上。