我不想为所有请求启用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令牌。