如何在 Phoenix 框架中有选择地禁用 CSRF 检查
How to selectively disable CSRF check in Phoenix framework
我正在尝试创建一个指向我的网站的 Facebook 页面选项卡。
Facebook 向我网站的 url 发送 HTTP POST 请求。
这里的问题是服务器有内置的 CSRF 检查,它 returns 出现以下错误:
(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`
服务器需要 Facebook 无法拥有的 CSRF 令牌。所以,我想有选择地禁用路径 www.mywebsite.com/facebook.
的 CSRF
如何在 Phoenix Framework 中实现?
Plug.CSRFProtection
在您的路由器中启用 protect_from_forgery
。这是在 browser
管道中默认设置的。一旦添加了插件,就无法禁用它,而是必须首先不设置它。您可以通过将其移出 browser
并仅在需要时包含它来实现。
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
我正在尝试创建一个指向我的网站的 Facebook 页面选项卡。 Facebook 向我网站的 url 发送 HTTP POST 请求。 这里的问题是服务器有内置的 CSRF 检查,它 returns 出现以下错误:
(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`
服务器需要 Facebook 无法拥有的 CSRF 令牌。所以,我想有选择地禁用路径 www.mywebsite.com/facebook.
的 CSRF如何在 Phoenix Framework 中实现?
Plug.CSRFProtection
在您的路由器中启用 protect_from_forgery
。这是在 browser
管道中默认设置的。一旦添加了插件,就无法禁用它,而是必须首先不设置它。您可以通过将其移出 browser
并仅在需要时包含它来实现。
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