Есть ли способ использовать штепсель Phoenix только для одного маршрута? - PullRequest
2 голосов
/ 02 апреля 2020

В Фениксе у меня есть следующие маршруты:

  scope "/", ManaWeb do
    pipe_through [:browser, :auth]
    get "/register",  RegistrationController, :new
    post "/register", RegistrationController, :register
  end

Однако я хотел бы установить Plug для последнего маршрута (POST).

Как бы я go о что с текущими инструментами?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2020

Как указано в документации для Phoenix.Router.pipeline/2

Каждый раз, когда вызывается pipe_through/1, новые конвейеры добавляются к ранее заданным.

Тем не менее, это будет работать:

scope "/", ManaWeb do
  pipe_through [:browser, :auth]
  get "/register",  RegistrationController, :new

  pipe_through :post_plug
  post "/register", RegistrationController, :register
end
3 голосов
/ 02 апреля 2020

Другим решением будет использование штекера непосредственно в контроллере

defmodule ManaWeb.RegistrationController do
  # import the post_plug...
  plug :post_plug when action in [:register]

  def register(conn, params) do
    # ...
  end
end
...