2015-09-15 6 views
16

Ich versuche, eine Facebook-Registerkarte zu erstellen, die auf meine Website zeigt. Facebook sendet eine HTTP-POST-Anfrage an die URL meiner Website. Das Problem hierbei ist, dass der Server über einen integrierten in CSRF-Check hat, und es gibt die folgende Fehlermeldung:Wie CSRF Check in Phoenix-Framework selektiv deaktivieren

(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` 

Der Server erwartet eine CSRF-Token, dass Facebook nicht haben kann. Also möchte ich CSRF selektiv für den Pfad www.mywebsite.com/facebook deaktivieren.

Wie kann ich es in Phoenix Framework tun?

Antwort

24

Die Plug.CSRFProtection ist in Ihrem Router mit protect_from_forgery aktiviert. Dies ist standardmäßig in der Pipeline browser festgelegt. Sobald ein Plug hinzugefügt wurde, gibt es keine Möglichkeit, ihn zu deaktivieren, stattdessen muss er nicht an erster Stelle gesetzt werden. Sie können dies tun, indem Sie es aus browser verschieben und es nur einschließen, wenn es erforderlich ist.

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 
+1

Vielen Dank !! Es klappt! :) –

Verwandte Themen