如何在具有嵌套会话的防护程序中使用会话对象



在NestJS中,使用nest-session,我希望在保护(CanActivate(中使用会话对象。

在控制器的操作中,这是通过使用@Session()来完成的,但我找不到也不知道如何在保护中获取这些数据。

首先创建一个包含会话对象并扩展express Request对象的接口,因为会话对象是nestjs创建的字段,而在Request对象上不存在。

import { Request } from 'express';
export interface IRequest extends Request {
session: any;
}

然后,您必须导入接口,创建一个具有此类型的变量,然后使用执行上下文来获取请求,就这样,req变量包含request对象,您可以使用req.session来获取会话对象。

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { IRequest } from './app.interface'; //Import interface
@Injectable()
export class Guard implements CanActivate {
constructor() {}
canActivate(context: ExecutionContext): boolean {
const req: IRequest = context.switchToHttp().getRequest(); //Request Object
const session = req.session; //Session Object
/*
Do whatever you want with your session here ...
*/
return true;
}
}

您可以在此处找到有关Request对象的更多信息:https://docs.nestjs.com/controllers#request-对象https://expressjs.com/en/api.html#req

最新更新