GraphQL 中查看器字段的含义是什么?
What is the meaning of viewer field in GraphQL?
GraphQL 中根查询字段 viewer
的用途是什么?
基于 this article,viewer
可用于接受令牌参数,以便我们可以查看当前登录的用户。
我该如何实施?
viewer
根查询字段的用途
viewer
不是 GraphQL 或 Relay 特定的东西。大多数网络应用程序服务于其用户或查看者的某些目的。为用户提供的各种数据建模的顶级实体可以命名为 viewer
。您也可以将其命名为 user
。例如,Relay todo example 有一个 viewer
根查询字段:
viewer: {
type: GraphQLUser,
resolve: () => getViewer(),
},
我们也可以不用 viewer
。例如,Relay starwars example 没有任何 viewer
根查询字段。
简而言之,将此 viewer
作为 GraphQL 模式的根查询字段使我们能够提供基于当前用户的数据。
实施:如何将身份验证令牌与查看器一起使用
我的回答是按照你提到的文章中已经描述的内容。步骤是:
在服务器端,创建一个突变来获取身份验证令牌。我们将其命名为 LoginMutation
。此突变的输入是用户凭据,输出是身份验证令牌。
在客户端,如果您使用 relay framework,请实施客户端变更。变异成功后,存储认证token
在客户端中继代码中,为您的 viewer
查询添加 authToken
参数。 authToken
的值为登录变异成功后收到的认证token。
另一种选择
正如文章中已经提到的,另一种验证用户身份的方法是在 GraphQL 之外进行。您可能希望看到两个出色的答案 and 了解详情。
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)
}
此当前记录的用户数据已合并到 viewer
字段本身或嵌套在其下:
# EXAMPLE 2
query {
viewer {
id
email
displayName
stories { ... }
}
}
# EXAMPLE 3
query {
viewer {
me { id email displayName }
stories { ... }
}
}
上面的所有三个示例都可以通过完全删除 viewer
字段来简化,并且仍然具有完全相同的功能(推荐):
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 which can be used either as a reference project or a seed/template for new developments. See api/graphql.ts
中找到完整的示例。
GraphQL 中根查询字段 viewer
的用途是什么?
基于 this article,viewer
可用于接受令牌参数,以便我们可以查看当前登录的用户。
我该如何实施?
viewer
根查询字段的用途
viewer
不是 GraphQL 或 Relay 特定的东西。大多数网络应用程序服务于其用户或查看者的某些目的。为用户提供的各种数据建模的顶级实体可以命名为 viewer
。您也可以将其命名为 user
。例如,Relay todo example 有一个 viewer
根查询字段:
viewer: {
type: GraphQLUser,
resolve: () => getViewer(),
},
我们也可以不用 viewer
。例如,Relay starwars example 没有任何 viewer
根查询字段。
简而言之,将此 viewer
作为 GraphQL 模式的根查询字段使我们能够提供基于当前用户的数据。
实施:如何将身份验证令牌与查看器一起使用
我的回答是按照你提到的文章中已经描述的内容。步骤是:
在服务器端,创建一个突变来获取身份验证令牌。我们将其命名为
LoginMutation
。此突变的输入是用户凭据,输出是身份验证令牌。在客户端,如果您使用 relay framework,请实施客户端变更。变异成功后,存储认证token
在客户端中继代码中,为您的
viewer
查询添加authToken
参数。authToken
的值为登录变异成功后收到的认证token。
另一种选择
正如文章中已经提到的,另一种验证用户身份的方法是在 GraphQL 之外进行。您可能希望看到两个出色的答案
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)
}
此当前记录的用户数据已合并到 viewer
字段本身或嵌套在其下:
# EXAMPLE 2
query {
viewer {
id
email
displayName
stories { ... }
}
}
# EXAMPLE 3
query {
viewer {
me { id email displayName }
stories { ... }
}
}
上面的所有三个示例都可以通过完全删除 viewer
字段来简化,并且仍然具有完全相同的功能(推荐):
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 which can be used either as a reference project or a seed/template for new developments. See api/graphql.ts
中找到完整的示例。