Какова цель поля корневого запроса viewer
в GraphQL?
Основываясь на этой статье, viewer
может использоваться для принятия параметра токена, чтобы мы могли видеть, кто в настоящий момент зарегистрирован.
Как мне его реализовать?
Какова цель поля корневого запроса viewer
в GraphQL?
Основываясь на этой статье, viewer
может использоваться для принятия параметра токена, чтобы мы могли видеть, кто в настоящий момент зарегистрирован.
Как мне его реализовать?
viewer
root viewer
не является чем-то графическим или ретрансляционным. Большинство веб-приложений обслуживают некоторые цели своих пользователей или зрителей. Сущность верхнего уровня для моделирования различных данных, обслуживаемых пользователю, может быть названа как viewer
. Вы также можете назвать его user
. Например, Пример списка реле > имеет поле запроса viewer
:
viewer: {
type: GraphQLUser,
resolve: () => getViewer(),
},
Мы также можем обойтись без viewer
. Например, Пример списка реле > не имеет поля запроса viewer
root.
Короче говоря, наличие этого viewer
в качестве корневого поля запроса схемы GraphQL позволяет нам предоставлять данные на основе текущего пользователя.
Мой ответ следует тому, что уже описано в вашей статье. Шаги:
На стороне сервера создайте мутацию, чтобы получить токен аутентификации. Назовите его LoginMutation
. Ввод в эту мутацию - это учетные данные пользователя, а выход - токен аутентификации.
На стороне клиента, если вы используете this и для деталей.
Джонас Хелфер написал статью из двух статей об этом, которую вы найдете очень полезной: Часть 1, Часть 2
Идея, лежащая в основе поля 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) {
...
}
}
Вы можете найти полный пример в React Starter Kit, который можно использовать либо как эталонный проект, либо как начальный шаблон/шаблон для новых разработок. Смотрите src/server/schema.js
.