如何使用Aws AppSync将JTW令牌(或任何其他变量)从父级传递到子级解析器

时间:2019-04-02 07:54:56

标签: graphql aws-appsync vtl

我正在尝试将JWT令牌传递给AppSync中的嵌套查询,以检查用户是否有权要求此类数据。

问题是AppSync 不允许我将JWT令牌从父查询转发到任何子解析器

示例:

mutation test {
emailSignIn(input: {email: "0@gmail.com", password: "XYZ"}) {
token
currentUser {
  id
  profilePicture {
    uuid
  }
  ... on Client {
    lastName
    pleadingList{
      id
      pleadingFiles {
        uuid
      }
      pleadingParticipantSlots {
        id
        participant {
          id
        }
      }
    }
  }

}
}
}

此处“ profilePicture”,“ pleadingList”,“ pleadingFiles”,“ pleadingParticipantSlots”,“ participant”是子查询,我希望能够确定谁在执行每个子查询,而不仅是主/父查询

有什么解决办法吗?

我已经尝试过的:

问题是,当我将令牌动态添加到主要结果中时,它并不总是有效(从某种意义上说,如果我从查询中获得的是一个数组,而一个子查询则是针对每个项目,那么我无权访问每个子请求中的令牌,因为$ ctx.source将仅是没有令牌的项目。

  • 我还尝试了将JWT令牌添加到ctx.stash的管道,但是更糟糕的是,在任何子请求之前都会清除ctx.stash(和ctx.args)

所以我想要的是将变量传递给所有子解析器的方法,或者是将标头从父请求传递到嵌套查询的方法。

我使它起作用的唯一方法(这很丑陋,我不想这样做;))是每次在前端添加令牌作为查询和子查询参数...

like:

mutation test {
emailSignIn(input: {email: "0@gmail.com", password: "XYZ"}) {
token
currentUser {
  id
  profilePicture(token: "blablabla") {
    uuid
  }
  ... on Client {
    lastName
    pleadingList(token: "blablabla") {
      id
      pleadingFiles(token: "blablabla") {
        uuid
      }
      pleadingParticipantSlots {
        id
        participant(token: "blablabla") {
          id
        }
      }
    }
  }

}
}
}

我有点迷茫,在AWS AppSync文档中找不到任何相关的内容。 有什么办法吗?还是我觉得错了?

谢谢

1 个答案:

答案 0 :(得分:0)

Currently, AppSync does not support passing JWT tokens from the parent to child resolver. The workaround you have mentioned might be one of the current options.