Play Framework 2.5 CSRF 检查失败 ajax

Play Framework 2.5 CSRF check failed ajax

我不想为我的所有请求启用 CSRF 过滤器。 但是想以我的形式使用它。 所以我在控制器中像这样使用 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())
    }
  }

鉴于我只是使用

@CSRF.formField

将 CSRF 添加到表单 然后我使用 Ajax 获取 getCurrent 操作并获取 html 表单并保存我 post 它使用 Ajax 更改操作。问题是我得到

CSRF token check failed

提交时出错。尽管如此,我还是在表单中看到了 CSRF 隐藏字段。我做错了什么?

也许您的 JavaScript 库没有正确获取 csrfToken 字段?例如,当使用 jQuery 的 text() 而不是 val()...

时,您可以使用 issue

根据您的配置设置,您可能缺少 Csrf-Token 值。 Play 需要 headers(session) 中的 CSRF 令牌和(以 OR 查询字符串的形式)。更多信息 here.