我有一个GraphQL API和一个NodeJS & Angular应用程序,其中包含一个保存用户的MongoDB数据库。对于每个用户,都有一个公共页面,其中包含公共信息,如
id
和username
。当用户登录时,会有一个私人配置文件页面,其中包含扩展信息,如email
。
仅作为背景说明,我使用jsonwebtoken和accesscontrol来验证和授权用户。该信息存储在每个GraphQL解析函数的上下文中,因此可以使用任何需要识别已登录用户所需的内容。
我有一个GraphQL查询,按以下方式检索公共用户:
query getUserById($id: ID!) {
getUserById(id: $id) {
id,
username
}
}
我正在思考如何正确实现检索公共或私人用户的方法。由于GraphQL是强类型的,我在寻找正确解决方案时遇到了一些困难。
问题: 如何区分公共用户和私人用户?
考虑因素:
1. 单独查询 因此,其中一个选项是为公共和私人字段分别设置单独的查询:
公共查询
query getUserById($id: ID!) {
getUserById(id: $id) {
id,
username
}
}
私有查询
query getMe {
getMe {
id,
username,
email
}
}
2. 使用GraphQL接口
我看到了这篇介绍如何使用GraphQL接口的Medium文章,它解释了如何通过resolveType
函数返回不同类型。所以我的做法是这样的:
query getUser($id: ID!) {
getUser(id: $id) {
... on UserPrivate {
id,
username
}
... on UserPublic {
id,
username,
email
}
}
}
我还没有找到一个合适的解决方案,对于我目前拥有的任何一个想法我都不确定。
非常感谢任何帮助!