【问题标题】:Is there a way to prevent csrf popup form in playframework 2.6有没有办法在 playframework 2.6 中防止 csrf 弹出表单
【发布时间】:2022-02-16 16:50:57
【问题描述】:

我使用 playFramework 2.6。我有一个包含表单的弹出窗口。当我尝试提交表单时,我收到以下错误:

Erreur Client!403 - 在正文中找不到 CSRF 令牌。

我该如何解决这个错误?

【问题讨论】:

  • 发布您的表单代码和 application.conf。另外,您是否阅读过playframework.com/documentation/2.6.x/ScalaCsrf
  • 它以@form(CSRF(controllers.workflows.routes.Workflows.updatePhases(0L))) { //这里的一些代码}开头,所有其他表单都可以正常工作,只有弹出表单

标签: scala csrf playframework-2.6


【解决方案1】:

启用application.conf内的CSRF文件夹:

play.filters.enabled += "play.filters.csrf.CSRFFilter"

然后在你的表单中有这个:

<form action="/submit-form-url" method="POST">
  @CSRF.formField
  //Your form body  
</form>  

如果您不想使用帮助程序 (@CSRF.formField)

首先导入需要的库:import play.filters.csrf.CSRF

其次,在控制器方法中获取它的值:CSRF.getToken 并将其传递给视图。

第三,在视图内(表单初始行之后)使用隐藏输入来保存令牌值:

<input type="hidden" name="csrfToken" value="whatever-that-is"> 

【讨论】:

  • 实际上,所有其他表单都可以正常工作,我像这样添加了 csrf @helper.form(CSRF(controllers.admin.routes.Templates.update(0L))) {},但我没有'不知道为什么它不适用于弹出表单。
  • @GarraouiMarwen 弹出窗口是什么意思,一个模态?还是使用 JS 的实际弹出窗口?如果它是 JS 的东西,您需要将 csrf 值传递给视图,并在表单中将其用作隐藏输入。我为此更新了答案。
  • 这是一个包含简单表单的模态
  • @GarraouiMarwen 是 Foundation/Bootstrap 模式?我每天都在毫无问题地使用它们。您能否复制/粘贴您的模态代码,显然取出可能包含的任何敏感数据。还要添加关于 csrf 的 application.conf 设置。谢谢。
  • 谢谢 Dave Rose,我通过在模态表单中添加 @CSRF.formField 来解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
相关资源
最近更新 更多