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.
我不想为我的所有请求启用 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()
...
根据您的配置设置,您可能缺少 Csrf-Token
值。 Play 需要 headers(session) 中的 CSRF 令牌和(以 OR 查询字符串的形式)。更多信息 here.