加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – post方法渲染403 forbidden方法而不是执行post方法代码

发布时间:2020-12-16 09:03:26 所属栏目:安全 来源:网络整理
导读:注意:我是Play Framework的新手 使用这个video tutorial and playlist,我设法创建一个简单的webapp. 问题: 路径文件中的POST方法似乎不执行所需的POST代码. 给定下面的路由文件,浏览到localhost:{port} / user / register请求GET,从而呈现并返回寄存器视
注意:我是Play Framework的新手

使用这个video tutorial and playlist,我设法创建一个简单的webapp.

问题:

路径文件中的POST方法似乎不执行所需的POST代码.

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

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

如果在寄存器视图中将method =“post”添加到表单,则会显示立即403 Forbidden页面页面.

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

路线文件:

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

将CSRF令牌添加到请求中,如下所示:

@import helper._

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

或者在表格的正文中:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读