如何在 Nestjs 的 Passport JWT 验证功能中访问 Express 请求?

问题描述 投票:0回答:1

我无法在验证功能中访问来自 Express 的请求。它返回有效负载:

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { PrismaService } from 'src/prisma/prisma.service';
import { Request } from 'express';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
  constructor(config: ConfigService, private prisma: PrismaService) {
    super({
      jwtFromRequest: ExtractJwt.fromExtractors([
        (request: Request) => {
          //Check if user has cookie "access_token"
          if (
            request.cookies &&
            'access_token' in request.cookies &&
            request.cookies.access_token.length > 0
          ) {
            return request.cookies.access_token;
          }
          return null;
        },
      ]),
      ignoreExpiration: false,
      secretOrKey: config.get('JWT_SECRET'),
    });
  }

  async validate(request: Request, payload: any) {
    console.log(request);
    console.log(payload)
  }
}

Request 参数返回 payload 和 payload 参数返回 [Function]

nestjs passport.js
1个回答
0
投票

如果您希望请求显示在

validate
中,您必须将
passReqToCallback: true
添加到您提供给
super
的选项中,在
constructor
JwtStrategy
中。没有它,
validate
的参数就是解析出来的JWT和
verify

的回调函数
© www.soinside.com 2019 - 2024. All rights reserved.