nestjs 切换url token认证是否登录
时间: 2023-09-30 19:01:51 浏览: 99
在 NestJS 中,我们可以使用中间件来实现基于 token 的认证。当用户访问需要认证的路由时,我们可以检查请求中是否包含有效的 token,并根据 token 是否有效来决定是否允许用户访问。
在切换 URL token 认证时,我们需要更新中间件中检查 token 的逻辑。具体来说,当用户访问需要认证的路由时,我们需要检查两个地方是否包含有效的 token:
1. 请求头部中是否包含 token
2. URL 参数中是否包含 token
我们可以使用 NestJS 的 `AuthGuard` 守卫来实现这个逻辑。具体来说,我们可以创建一个自定义的守卫,继承 `AuthGuard` 守卫,并覆盖其中的 `canActivate` 方法。在这个方法中,我们可以先检查请求头部中是否包含 token,如果包含则直接返回 true,否则再检查 URL 参数中是否包含 token。
以下是一个示例代码:
```typescript
import { ExecutionContext, Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class TokenAuthGuard extends AuthGuard('jwt') {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest();
const token = request.header('Authorization')?.replace('Bearer ', '') || request.query.token;
if (token) {
// 在请求头部或 URL 参数中找到了 token
request.headers.authorization = `Bearer ${token}`; // 将 token 放到请求头部中
return true;
} else {
// 没有找到 token
return false;
}
}
}
```
使用这个自定义守卫时,我们只需要在需要认证的路由上使用 `@UseGuards(TokenAuthGuard)` 装饰器即可。这样,当用户访问这个路由时,系统会自动检查请求中是否包含有效的 token,并根据检查结果来决定是否允许用户访问。
阅读全文