代码之家  ›  专栏  ›  技术社区  ›  Sibelius Seraphini

GraphQL中查看器字段的含义是什么?

  •  29
  • Sibelius Seraphini  · 技术社区  · 8 年前

    根查询字段的用途是什么 viewer 在GraphQL中?

    基于 this article , 观众 可用于接受令牌参数,以便我们可以查看当前登录的用户。

    我应该如何实施它?

    2 回复  |  直到 7 年前
        1
  •  35
  •   Community Neeleshkumar S    7 年前

    目的 viewer 根查询字段

    观众 不是特定于GraphQL或Relay的。大多数web应用程序都为其用户或查看者提供某些用途。为用户提供的各种数据建模的顶级实体可以命名为 观众 。您也可以为其命名 user 例如 Relay todo example 有一个 观众 根查询字段:

    viewer: {
      type: GraphQLUser,
      resolve: () => getViewer(),
    },
    

    我们也可以不用 观众 例如, Relay starwars example 没有任何 观众 根查询字段。

    简而言之,有了这个 观众 作为GraphQL模式的根查询字段,我们可以根据当前用户提供数据。

    实现:如何与查看器一起使用身份验证令牌

    我的回答与你所提到的文章中已经描述的一样。这些步骤包括:

    1. 在服务器端,创建一个变体以获取身份验证令牌。让我们说出它的名字 LoginMutation 。此变异的输入是用户凭据,输出是身份验证令牌。

    2. 在客户端,如果使用 relay framework ,实现客户端变异。变异成功后,存储身份验证令牌。

    3. 在客户端中继代码上,添加 authToken 您的 观众 查询。的价值 身份验证令牌 是成功登录变异后收到的身份验证令牌。

    另一种选择

    正如本文中已经提到的,认证用户的另一种方法是在GraphQL之外进行。你可能想看到两个很好的答案 this this 了解详细信息。

    Jonas Helfer为此写了一篇分为两部分的文章,您会发现这篇文章非常有用: Part 1 , Part 2

        2
  •  2
  •   Konstantin Tarkus    3 年前

    背后的想法 viewer 字段(设计模式)用于对仅与当前登录用户相关的顶级查询字段进行分组。例如:

    # EXAMPLE 1
    
    quer {
      viewer {
        stories { ... } # the list of published stores as well as drafts (current user)
      }
    
      stories { ... }   # the list of published stories (all users)
    }
    

    此当前记录的用户数据已合并到 观众 字段本身或嵌套在其下:

    # EXAMPLE 2
    
    query {
      viewer {
        id
        email
        displayName
        stories { ... }
      }
    }
    
    # EXAMPLE 3
    
    query {
      viewer {
        me { id email displayName }
        stories { ... }
      }
    }
    

    通过删除 观众 字段,但仍具有完全相同的功能(推荐):

    query {
      # The currently logged in user or NULL if not logged in
      me {
        id
        email
        displayName
      }
    
      # Published stories only (all users)
      stories {
        ...
      }
    
      # Published stories as well as drafts (the current user)
      stories(drafts: true) {
        ...
      }
    }
    

    您可以在中找到完整的示例 GraphQL API and Relay Starter Kit 它可以用作参考项目或新开发的种子/模板。看见 api/graphql.ts .