Проверка идентификатора с помощью 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 в их жетоне.

Другие вопросы по тегам