У меня есть приложение Phoenix с Absinthe для API Graphql.
Guardian используется для аутентификации запросов, которые предоставляют токен носителя в заголовке. Все это отлично работает до тех пор, пока не будет предоставлен недействительный токен. Я указал обработчик ошибок в моем конвейере Guardian, и в настоящее время он просто отвечает 401 HTTP-ответом:
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?





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