NestJS |护照:类型错误:无法读取未定义的属性(读取“登录”)

2024-02-18

情况:

  • 在nestjs和graphql中开发api
  • 在一台笔记本电脑上工作,一切正常
  • 然后在其他笔记本电脑上克隆我的存储库,安装依赖项,创建一个新的本地数据库。
  • 应用程序正在构建,没有错误
  • 当在浏览器中关注 localhost:4000 打开 graphql Playground 时,我收到 500 错误结束下一条消息:
    ERROR [ExceptionsHandler] Cannot read properties of undefined (reading 'logIn')
    TypeError: Cannot read properties of undefined (reading 'logIn')
        at authenticate (/home/gleb/Projects/artwine-api/node_modules/passport/lib/middleware/authenticate.js:96:21)
        at /home/gleb/Projects/artwine-api/node_modules/@nestjs/passport/dist/auth.guard.js:91:3
        at new Promise (<anonymous>)
        at /home/gleb/Projects/artwine-api/node_modules/@nestjs/passport/dist/auth.guard.js:83:83
        at JWTAccessAuthGuard.<anonymous> (/home/gleb/Projects/artwine-api/node_modules/@nestjs/passport/dist/auth.guard.js:49:36)
        at Generator.next (<anonymous>)
        at fulfilled (/home/gleb/Projects/artwine-api/node_modules/@nestjs/passport/dist/auth.guard.js:17:58)
        at processTicksAndRejections (node:internal/process/task_queues:96:5)
    

捕获错误的护照库函数的代码:

return function authenticate(req, res, next) {
    req.login =
    req.logIn = req.logIn || IncomingMessageExt.logIn;
    req.logout =
    req.logOut = req.logOut || IncomingMessageExt.logOut;
    req.isAuthenticated = req.isAuthenticated || IncomingMessageExt.isAuthenticated;
    req.isUnauthenticated = req.isUnauthenticated || IncomingMessageExt.isUnauthenticated;
    
    req._sessionManager = passport._sm;
..............

存储库链接:https://github.com/Gleb-Gaiduk/artwine-api https://github.com/Gleb-Gaiduk/artwine-api关于克隆工作存储库后可能出现什么问题有什么想法吗?


您需要将 ExecutionContext 从 Graphql 转换为 Nestjs/Passport 可以读取的:https://docs.nestjs.com/graphql/other-features#execution-context https://docs.nestjs.com/graphql/other-features#execution-context

import { ExecutionContext, Injectable } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class MySuperGuard extends AuthGuard('jwt') {
  getRequest(context: ExecutionContext) {
    const ctx = GqlExecutionContext.create(context);
    return ctx.getContext().req;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NestJS |护照:类型错误:无法读取未定义的属性(读取“登录”) 的相关文章

随机推荐