在AWS Lambda部署的Apollo GraphQL中未处理授权标头

问题描述

我有以下突变:

updatePoint(id: String! data: PointInput!): Result @auth(requires: "POINT_CRUD")

用于处理此问题的AuthDirective:

class AuthDirective extends SchemaDirectiveVisitor {
    visitFieldDefinition(field) {
        const requiredRole = this.args.requires;
        const originalResolve = field.resolve || defaultFieldResolver;
        const roleChecker = new RoleChecker();

        field.resolve = async function(...args) {

            const context = args[2];
            const isAuthorized = await roleChecker.check(context.authorization,requiredRole);

            if (!isAuthorized) {
                throw new AuthenticationError(`You need following role: ${requiredRole}`);
            }

            return originalResolve.apply(this,args);
        }
    }
}

我在操场上称变异为

mutation {
  updatePoint(id: "poppels",data: { id: "poppels",json: "session" }) {
    error
  }
}

AuthDirective在Playground的本地(http)正常运行,但是当我将其部署到AWS Lambda(https)时,似乎没有考虑带有授权令牌的标头或与其他标头发生冲突。当我在本地请求中不包含任何标头时,我会看到相同的错误:

{
  "errors": [
    {
      "message": "One or more parameter values are not valid. The AttributeValue for a key attribute cannot contain an empty string value. Key: id","locations": [
        {
          "line": 2,"column": 3
        }
      ],"path": [
        "updatePoint"
      ],"extensions": {
        "code": "INTERNAL_SERVER_ERROR","exception": {
          "message": "One or more parameter values are not valid. The AttributeValue for a key attribute cannot contain an empty string value. Key: id","code": "ValidationException","time": "2020-08-12T12:13:49.683Z","requestId": "UB5MJC41BMSJABATLVQAURKDVRVV4KQNSO5AEMVJF66Q9ASUAAJG","statusCode": 400,"retryable": false,"retryDelay": 22.224996180111013,"stacktrace": [
            "ValidationException: One or more parameter values are not valid. The AttributeValue for a key attribute cannot contain an empty string value. Key: id","    at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:51:27)","    at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:688:14)","    at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)","    at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)","    at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10","    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)","    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:690:12)","    at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
          ]
        }
      }
    }
  ],"data": {
    "updatePoint": null
  }
}

有什么想法为什么会这样?是我缺少的Lambda配置,还是创建Apollo服务器的方式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...