Отправка ответа graphql из обработчика ошибок Guardian при использовании Absinthe - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть приложение 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 Ответ

0 голосов
/ 20 ноября 2018

Мое предложение - создать плагин, который будет проверять токен Bearer и устанавливать текущего пользователя в контексте. Затем вы можете написать Absinthe.Middleware , чтобы проверить присутствие текущего пользователя и установить ошибку, если она отсутствует.

Кроме того, посмотрите на промах * абсент для лучших ошибок.

...