当前位置:  开发笔记 > 编程语言 > 正文

Phoenix - invald CSRF on AJAX post

如何解决《Phoenix-invaldCSRFonAJAXpost》经验,为你挑选了2个好方法。

我正在学习使用Phoenix框架,我正在尝试向控制器操作执行AJAX帖子 - 但是,我遇到了CSRF保护问题.

对于初学者,我没有使用表单 - 只是想将文本从输入传递给控制器​​:





控制器(不担心做任何事情input......只是想验证一个成功的帖子!):

def process(conn, %{"input" => input}) do
    IO.puts "got it!"
end

和路由器:

post "/test/process", TestController, :process

我几乎解除$.ajax了Rails应用程序的调用,它工作正常,但它不是在这里做的 - 运行它返回403错误和日志(Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site Request Forgery) token, make sure all requests include a valid '_csrf_token' param or 'x-csrf-token' header.

有人可以提供任何指导吗?谢谢!



1> Dogbert..:

这是因为Phoenix默认情况下不会使用CSRF令牌创建元标记.它们仅包含在Phoenix的辅助函数生成的表单中,并且它们处于隐藏的输入中.

要在凤凰城以编程方式获取CSRF令牌,您可以致电Plug.CSRFProtection.get_csrf_token/0.有很多方法可以将它传递给你的JS.您可以在布局中添加元标记以将其包含在每个页面中,但这可能效率不高,因为它将为所有页面生成.您也可以将它存储在您需要的视图中的JS变量中:







2> Mike Andrian..:

Phoenix已经有了助手csrf_meta_tag。将其包含在布局中,如下所示:


  
     <%= csrf_meta_tag %>
     ...

然后像这样在您的js中使用它: $("meta[name='csrf-token']").attr("content")

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有