elixir - site - sitios csrf
Cómo deshabilitar selectivamente la comprobación de CSRF en el marco de Phoenix (1)
La Plug.CSRFProtection
está habilitada en su enrutador con protect_from_forgery
. Esto se establece de forma predeterminada en la canalización del browser
. Una vez que se ha agregado un enchufe, no hay forma de desactivarlo, en su lugar no se debe configurar en primer lugar. Puede hacerlo moviéndolo fuera del browser
y solo incluyéndolo cuando sea necesario.
defmodule Foo.Router do
use Foo.Web, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
#plug :protect_from_forgery - move this
end
pipeline :csrf do
plug :protect_from_forgery # to here
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", Foo do
pipe_through [:browser, :csrf] # Use both browser and csrf pipelines
get "/", PageController, :index
end
scope "/", Foo do
pipe_through :browser # Use only the browser pipeline
get "/facebook", PageController, :index #You can use the same controller and actions if you like
end
end
Estoy intentando crear una pestaña de página de Facebook que apunte a mi sitio web. Facebook envía una solicitud HTTP POST a la url de mi sitio web. El problema aquí es que el servidor tiene una comprobación CSRF integrada y devuelve el siguiente error:
(Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site Forgery Protection) token, make sure all requests include a ''_csrf_token'' param or an ''x-csrf-token'' header`
El servidor espera un token CSRF que Facebook no puede tener. Por lo tanto, quiero desactivar selectivamente CSRF para la ruta www.mywebsite.com/facebook.
¿Cómo puedo hacerlo en Phoenix Framework?