问题
In Phoenix I have my routes as follow :
scope "/", ManaWeb do
pipe_through [:browser, :auth]
get "/register", RegistrationController, :new
post "/register", RegistrationController, :register
end
However I would like to set a Plug for the last route (POST).
How would I go about that with current tools ?
回答1:
As it is stated in the documentation for Phoenix.Router.pipeline/2
Every time
pipe_through/1
is called, the new pipelines are appended to the ones previously given.
That said, this would work:
scope "/", ManaWeb do
pipe_through [:browser, :auth]
get "/register", RegistrationController, :new
pipe_through :post_plug
post "/register", RegistrationController, :register
end
回答2:
Another solution would be using the plug directly in the controller
defmodule ManaWeb.RegistrationController do
# import the post_plug...
plug :post_plug when action in [:register]
def register(conn, params) do
# ...
end
end
来源:https://stackoverflow.com/questions/60996561/is-there-a-way-to-have-a-phoenix-plug-just-for-one-route