如何在带有嵌套会话的后卫中使用会话对象

时间:2020-10-10 22:40:08

标签: nestjs

在NestJS中,我使用nest-session在防护(CanActivate)中使用会话对象。

在控制器的操作中,这是通过使用@Session()完成的,但是我找不到也没有弄清楚如何使用警卫来获取此数据。

1 个答案:

答案 0 :(得分:4)

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

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-object https://expressjs.com/en/api.html#req