gpt4 book ai didi

scala - post 方法渲染 403 forbidden 页面而不是执行 post 方法代码

转载 作者:行者123 更新时间:2023-12-01 09:39:59 26 4
gpt4 key购买 nike

注意:我是 Play Framework 的新手

使用这个 video tutorial and playlist ,我设法创建了一个简单的网络应用程序。

问题:

POST 路由文件中的方法似乎没有执行所需的 POST 代码。

给定下面的路由文件,浏览到 localhost:{port}/user/register 请求一个 GET,从而呈现并返回 register View .

填写 register view 字段,然后单击 submit,刷新页面(通过清除输入字段)并显示预期的“已注册”文本

如果 method="post" 已添加到 register View 中的 form 中,则立即出现 403 Forbidden page 显示页面。

为什么不显示“已注册”文本,我错过了什么(做错了)?

路线文件:

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)

Controller :

HomeController
LoginController

登录 Controller 方法:

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"); }

注册 View :

@()

<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,因为“默认情况下,Play 将需要 CSRF 检查”See here?

像这样将 CSRF token 添加到请求中:

@import helper._

<form method="post" action="@CSRF(routes.LoginController.doRegister())">
...

或者在表单正文中:

<form method="post" action="@routes.LoginController.doRegister()">
@CSRF.formField
...

关于scala - post 方法渲染 403 forbidden 页面而不是执行 post 方法代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45017920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com