播放框架2.5 CSRF检查失败ajax



我不想为所有请求启用CSRF过滤器。但我想把它写成我的形式。所以我在controller:

中使用CSRFAddToken和CSRFCheck
  def change(lng: String) = checkToken {
      Action { implicit request =>
          registerForm.bindFromRequest.fold(
            { formWithErrors =>
              Ok(Json.toJson(JsObject(Map("status" -> JsString("error"), "message" -> JsString(messagesApi.translate("register.all_fields_required", Seq()).get)))))
            },
            value =>
              [Code was cutted]
          )
      }
    }
  def getCurrent(lng: String) = addToken {
    Action { implicit request =>
        Ok(views.html.profile_edit_popup())
    }
  }

在view中我只使用

@CSRF.formField

将CSRF添加到表单然后我得到getCurrent操作使用Ajax和获取html的形式和保存时,我张贴它使用Ajax来改变动作。问题是我得到

CSRF令牌检查失败

提交错误。即便如此,我还是在表单中看到了CSRF隐藏字段。我做错了什么?

也许你的JavaScript库没有正确拾取csrfToken字段?例如,当使用jQuery的text()而不是val()时,您可能会遇到问题…

根据您的配置设置,您可能会丢失Csrf-Token值。Play需要头(会话)和(形式或查询字符串)中的CSRF令牌。

最新更新