Отправка ответа graphql из обработчика ошибок Guardian при использовании Absinthe
У меня есть приложение Phoenix с Absinthe для API Graphql.
Guardian используется для аутентификации запросов, которые предоставляют токен Bearer в заголовке. Все это прекрасно работает, пока не будет предоставлен неверный токен. Я указал обработчик ошибок в моем конвейере Guardian, и в настоящее время он просто отвечает HTTP-ответом 401:
def auth_error(conn, {type, _reason}, _opts) do
body = to_string(type)
conn
|> put_resp_content_type("text/plain")
|> send_resp(401, body)
end
Это не очень удобно для любого клиента graphql, и мои средства распознавания действительно не заботятся о том, является ли токен недействительным, поскольку они имеют свои собственные проверки, чтобы увидеть, предоставляется ли пользователь в контексте.
Есть ли способ продолжить конвейер из обработчика ошибок, если токен недействителен, поэтому я могу просто дать правильный ответ graphql?
1 ответ
Я предлагаю создать плагин, который будет проверять токен Bearer и устанавливать текущего пользователя в контексте. Затем вы можете написать Absinthe.Middleware для проверки присутствия текущего пользователя и установить ошибку, если она отсутствует.
Кроме того, взгляните на абсент для более точных ошибок.