В настоящее время я работаю над изменением рельсового бэкенда проекта с REST на graphql, и у меня возникает ошибка с аутентификацией после их урока - https://www.howtographql.com/graphql-ruby/4-authentication/
Я использую движок GraphiQLдля проверки всех моих запросов и получения ошибки status 422 unprocessable Entity, User Must Exist
Это имеет смысл, поскольку выполняемая мной мутация заключается в создании нового цвета, который имеет отношение belongs_to
к пользователю.
О программеНа полпути через страницу, связанную выше ^^^, написано:
С помощью токена, предоставленного мутацией signinUser
, приложения могут аутентифицировать последующие запросы.Есть несколько способов сделать это.В этом руководстве мы просто собираемся использовать встроенный сеанс , поскольку это не добавляет никаких требований к клиентскому приложению.Сервер GraphQL должен иметь возможность получать токен из заголовка сеанса при каждом запросе, определять, к какому пользователю он относится, и передавать эту информацию обработчикам.
Я могу успешно вернутьсятокен аутентификации с помощью метода signinUser
, подобный тому, который документы ранее показывали на той же странице - метод, который он публикует, также сохраняет токен в этом предполагаемом сеансе в этом методе здесь (также по той же опубликованной ссылкевыше ^^^):
def call(_obj, args, ctx)
input = args[:email]
return unless input
user = User.find_by email: input[:email]
return unless user
return unless user.authenticate(input[:password_digest])
crypt = ActiveSupport::MessageEncryptor.new(ENV["SECRET_BASE_KEY"])
token = crypt.encrypt_and_sign("user-id:#{ user.id }")
puts "please **********************************"
p ctx[:session]
ctx[:session][:token] = token
puts "please **********************************"
p ctx[:session]
OpenStruct.new({
user: user,
token: token
})
end
В моей отчаянной борьбе вы сможете увидеть, что я выкинул сессию прямо перед возвратом метода, и неудивительно, что он содержит токен для этогопользователи входят в систему.
Однако, когда я приступил к выполнению мутации для создания цвета, я ожидал, что сессия все еще будет содержать этот токен, и я смогу успешно зафиксировать этот цвет.Это было не так, и когда я выдал сессию для этого запроса, он возвращает пустой хеш.
Я не могу найти никакой информации о том, как работает встроенный graphql сеанс -и я новичок в graphql в целом.
Мои основные вопросы будут таковы: предполагается ли, что graphql session должен кэшировать информацию о токене?Почему информация не переносится на запросы, следующие за signinUser
?Стоит ли мне даже пытаться использовать аутентификацию в этом учебном пособии, поскольку в документах утверждается, что этот метод аутентификации не является долгосрочным решением?
Я знаю, что это много, но я бы очень признателен за дополнительный умна этом.
Заранее спасибо!
PS.Я понимаю, что в данном руководстве используются ссылки , и я использую здесь цвета - это сделано намеренно, и я приложил все усилия, чтобы убедиться, что семантические различия не вызывают никаких ошибок.