post方法渲染403禁止页面而不是执行post方法代码
post method rendering 403 forbidden page instead of executing post method code
注意:我是 Play Framework 的新手
使用这个 video tutorial and playlist,我设法创建了一个简单的网络应用程序。
问题:
POST
路由文件中的方法似乎没有执行所需的 POST 代码。
给定下面的路由文件,浏览到 localhost:{port}/user/register
请求 GET
,从而呈现并返回 register view
。
填写 register view
字段并单击 submit
,刷新页面(通过清除输入字段)并显示预期的 "registered" 文本
如果 method="post"
已添加到 register view
中的 form
,则立即显示 403 Forbidden page
页面。
为什么不显示 "registered" 文本,我错过了什么(做错了)?
路线文件:
GET / controllers.HomeController.index
GET /user controllers.LoginController.index()
GET /user/login controllers.LoginController.login()
POST /user/login controllers.LoginController.doLogin()
GET /user/register controllers.LoginController.register()
POST /user/register controllers.LoginController.doRegister()
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
控制器:
HomeController
LoginController
LoginController 方法:
public Result index() { return ok(views.html.user.index.render(User.getAllUsers())) }
public Result login() { return ok(login.render()); }
public Result doLogin() { return ok("registered"); }
public Result register() { return ok(register.render()); }
public Result doRegister() { return ok("registered"); }
注册查看:
@()
<html>
<head>
<title>Register new User</title>
</head>
<body>
<h1>Register User</h1>
<br>
<br>
Enter Email Address: <input type="password" name="confirmPassword">
Enter Password: <input type="password" name="confirmPassword">
Confirm Password: <input type="password" name="confirmPassword">
<br>
<br>
<form action="@routes.LoginController.doRegister()">
<input type="submit" value="Register"/>
</form>
</body>
</html>
控制台输出错误:
[warn] p.filters.CSRF - [CSRF] Check failed because no or invalid token found in body
[warn] p.filters.CSRF - [CSRF] Check failed with NoTokenInBody
我认为您是对的,您需要定义提交表单数据时要使用的 HTTP 方法(GET 或 POST)。
可能有人看到你 Forbidden
因为 "By default, Play will require a CSRF check" See here?
像这样将 CSRF 令牌添加到请求中:
@import helper._
<form method="post" action="@CSRF(routes.LoginController.doRegister())">
...
或在表格正文中:
<form method="post" action="@routes.LoginController.doRegister()">
@CSRF.formField
...
注意:我是 Play Framework 的新手
使用这个 video tutorial and playlist,我设法创建了一个简单的网络应用程序。
问题:
POST
路由文件中的方法似乎没有执行所需的 POST 代码。
给定下面的路由文件,浏览到 localhost:{port}/user/register
请求 GET
,从而呈现并返回 register view
。
填写 register view
字段并单击 submit
,刷新页面(通过清除输入字段)并显示预期的 "registered" 文本
如果 method="post"
已添加到 register view
中的 form
,则立即显示 403 Forbidden page
页面。
为什么不显示 "registered" 文本,我错过了什么(做错了)?
路线文件:
GET / controllers.HomeController.index
GET /user controllers.LoginController.index()
GET /user/login controllers.LoginController.login()
POST /user/login controllers.LoginController.doLogin()
GET /user/register controllers.LoginController.register()
POST /user/register controllers.LoginController.doRegister()
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
控制器:
HomeController
LoginController
LoginController 方法:
public Result index() { return ok(views.html.user.index.render(User.getAllUsers())) }
public Result login() { return ok(login.render()); }
public Result doLogin() { return ok("registered"); }
public Result register() { return ok(register.render()); }
public Result doRegister() { return ok("registered"); }
注册查看:
@()
<html>
<head>
<title>Register new User</title>
</head>
<body>
<h1>Register User</h1>
<br>
<br>
Enter Email Address: <input type="password" name="confirmPassword">
Enter Password: <input type="password" name="confirmPassword">
Confirm Password: <input type="password" name="confirmPassword">
<br>
<br>
<form action="@routes.LoginController.doRegister()">
<input type="submit" value="Register"/>
</form>
</body>
</html>
控制台输出错误:
[warn] p.filters.CSRF - [CSRF] Check failed because no or invalid token found in body
[warn] p.filters.CSRF - [CSRF] Check failed with NoTokenInBody
我认为您是对的,您需要定义提交表单数据时要使用的 HTTP 方法(GET 或 POST)。
可能有人看到你 Forbidden
因为 "By default, Play will require a CSRF check" See here?
像这样将 CSRF 令牌添加到请求中:
@import helper._
<form method="post" action="@CSRF(routes.LoginController.doRegister())">
...
或在表格正文中:
<form method="post" action="@routes.LoginController.doRegister()">
@CSRF.formField
...