如何使用嵌套会话在守卫中使用会话对象

D. *_*ael 3 nestjs

在 NestJS 中,使用nest-session,我想在守卫 ( CanActivate) 中使用会话对象。

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

Jua*_*bal 5

首先创建一个包含 session 对象并扩展 express Request 对象的 Interface,因为 session 对象是 nestjs 创建的字段,并且不存在于 Request 对象上。

import { Request } from 'express';
export interface IRequest extends Request {
   session: any;
}
Run Code Online (Sandbox Code Playgroud)

然后当心,你必须导入接口,创建一个这种类型的变量,然后使用执行上下文来获取请求,就是这样,req 变量包含请求对象,你可以使用 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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