在使用graphql

时间:2016-11-15 23:19:59

标签: graphql

我需要做的本质上是一个upsert。什么是检查现有用户和做一个突变与另一个突变的有效方式。在我的情况下,如果用户存在,我需要进行登录,否则我应该在登录前调用create。我使用的是graph.cool graphql服务。我可以做两个单独的调用,但是有没有办法我可以在graphql中编写它以便它在一次调用中完成并且不需要第二次往返?请注意,我无法控制后端,只能使用现有的功能。

https://docs.graph.cool/reference/simple-api/user-authentication

mutation {

  // Only create a user if they do not exist already
  // is there a way to do a conditional statement in graphql here?
  createUser(authProvider: { auth0: { idToken: "<idToken>" }}) {
    id
  }

  // always try signing the user in with the token we already got from auth0
  signinUser(input: { auth0: { idToken: "<idToken>" }}) {
    id
    token
  }

}

1 个答案:

答案 0 :(得分:1)

我认为你的问题归结为&#34;我如何根据后端决定做什么来返回令牌或id?&#34;

答案是:a union type

union authResult = id | token

mutation {
  authenticateUser(authProvider: { auth0: { idToken: "<idToken>" }}) {
    authResult
  }
}

现在你已经决定了#34;登录或创建?&#34;到后端,你可以在一次旅行中找到结果。

请注意,因为您希望在一次旅行中完成此操作,所以您必须一次性提供所有必要信息 - IE必须为createUser步骤提供足够的信息,即使后端没有创建因为用户已经存在。