尝试使用Scala Play进行简单的表单发布,收到未经授权的错误。
这是我的routes
文件:
POST /receiveForm controllers.HomeController.receiveForm
这是我的HomeController.scala
文件:
def receiveForm = Action { implicit request =>
println("receiveForm method")
Ok(views.html.index())
}
这是我的index.scala.html
:
@helper.form(routes.HomeController.receiveForm()) {
<input type="submit" name="submit" />
}
查看CSRF,但无法让它发挥作用。
答案 0 :(得分:1)
如果未找到或无效的CSRF令牌,您确实可以从play的CSRF过滤器获得Unauthorized
响应。
您是否按照here所述启用了CSRF过滤器?我假设你做到了。然后会确认您收到此错误,因为您没有发布预期的CSRF令牌。以下是修改表单的方法,以便在帖子的查询字符串中包含所需的标记:
@import helper._
@form(CSRF(routes.HomeController.receiveForm())) {
<input type="submit" name="submit" />
}
我还假设您最初通过GET
请求显示表单。这是创建初始令牌所必需的,如here所述。其余部分应保持原样。
有关将令牌添加到表单的其他方法(例如,作为输入字段),请参阅https://playframework.com/documentation/2.5.x/ScalaCsrf#Getting-the-current-token。