nestjs 使用cookie
时间: 2024-07-10 15:00:16 浏览: 147
nestjs-cookie-session:NestJS的惯用Cookie会话模块。 建立在`cookie-session` top之上
NestJS是一个基于TypeScript的开源Web框架,它在Express之上构建,提供了丰富的功能和模块化设计。如果你想要在NestJS应用中使用cookies进行用户身份验证或存储数据,你可以遵循这些步骤:
1. **安装依赖**:
首先,确保已经安装了`@nestjs/authentication`和`@nestjs/http`模块,它们包含了处理HTTP请求和身份验证的功能。如果还没有安装,可以通过`npm install @nestjs/authentication @nestjs/http`命令添加。
2. **创建服务**:
在`app.module.ts`或相关的模块中,引入`AuthGuard`或自定义的认证策略,并使用`useGlobalGuards`注册它:
```typescript
import { Module, GlobalGuard } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Module({
providers: [AuthGuard],
// ...
})
export class AppModule implements GlobalGuard {
canActivate(context: ExecutionContext) {
// 自定义登录检查逻辑
return true;
}
}
```
3. **设置cookie**:
在认证成功后,使用`Response`对象的`setCookie`方法来设置cookie:
```typescript
import { Injectable, CanActivate, HttpStatus, HttpResponse } from '@nestjs/common';
import * as cookieParser from 'cookie-parser';
import * as jwt from 'jsonwebtoken';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
canActivate(context: ExecutionContext): boolean {
// ...其他认证逻辑
const user = this.getUserFromToken(); // 获取用户信息
if (!user) {
return false;
}
// 设置cookie
const token = jwt.sign({ userId: user.id }, 'your-secret-key', { expiresIn: '1h' });
const response = context.switchToHttp().getResponse<HttpResponse>();
response.setCookie('jwt', token, { httpOnly: true, maxAge: 60 * 60 * 1000 });
return true;
}
}
```
这里设置了名为`jwt`的cookie,值为JWT令牌,通常`httpOnly`属性会确保cookie不被JavaScript脚本访问,`maxAge`则设置了cookie的有效时间。
4. **验证cookie**:
在每个需要保护的路由或控制器前,使用`@UseGuards(JwtAuthGuard)`装饰器,NestJS会自动在每次请求头中查找`jwt` cookie并解码验证。
阅读全文