Проверка идентификатора с помощью Guardian 1 и Phoenix 1.3
Я использую Guardian 1 и Phoenix 1.3. И я пытаюсь сделать API, который использует JWT. Теперь у меня есть аутентификация, работающая для маршрутов. Например, вы не можете получить доступ get api/users/
без действительного токена в заголовке.
У меня есть конвейер, который выглядит так:
defmodule PhxAuthApi.Auth.AuthPipeline do
use Guardian.Plug.Pipeline, otp_app: :phx_auth_api,
module: PhxAuthApi.Auth.Guardian,
error_handler: PhxAuthApi.Auth.AuthErrorHandler
plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}, realm: :none
plug Guardian.Plug.EnsureAuthenticated
plug Guardian.Plug.LoadResource, ensure: true
end
Чего я хочу добиться, так это чтобы пользователь звонил put api/users/1
Доступ к этому маршруту возможен только в том случае, если :id
в ресурсе токена. Я знаю, что могу получить ресурс, позвонив
resource = Guardian.Plug.current_resource(conn)
Но как мне это сделать? сделать еще один трубопровод?
Как бы это выглядело, я не смог найти никакой документации по достижению этого?
Я довольно новичок в Elixir и Phoenix, и это мой первый проект, который я собираюсь отправить.
1 ответ
Самый простой способ - создать еще один Plug
который должен быть включен в тот же конвейер после Guardian.Plug.LoadResource
,
На данный момент ресурс уже загружен, и вам нужно реализовать call
обратный вызов, чтобы запретить доступ, если пользователь не имеет соответствующего :id
в их жетоне.