0

我正在 Play 上进行一些简单的登录验证!2.6 框架 Web 应用程序,它似乎没有获取我在以下内容中包含的 CSRF 令牌view.loginForm

@import helper.CSRF

@(loginform: Form[UserLoginData])(implicit messages: MessagesProvider, request: RequestHeader)

@main() {
        <div class="row">
            <form method="post" class="col-md-6" id="loginform" autocomplete="on">
               @CSRF.formField
            <input type="text id="userName">
             <!-- other inputs and submit button-->
             </form>
        </div>
}

然后我的 conf.routes 通过以下方式处理 POST:

POST /login controllers.LoginRegController.attemptLogin

这是中的方法LoginRegController

def attemptLogin() = Action {
        implicit request: Request[AnyContent] => {
          loginform.bindFromRequest().fold(
            formWithErrors => BadRequest(views.html.login(formWithErrors)),
            successfulForm => {
              // check DB for valid inputs
                val userName = //retrieved from form
                Ok(views.html.afterLogin.dashboardviews.dashboard())
                  .withSession(request.session + ("authenticated" -> "true") + ("username" -> userName))
                  .withHeaders(SecurityHeadersFilter
                    .CONTENT_SECURITY_POLICY_HEADER -> " .fonts.googleapis.com ")
            }
          )
        }
      }

一旦用户点击提交,它就会被带到框架的默认授权页面,我在控制台上看到它没有通过 CSRF 检查:

[警告] p.filters.CSRF - [CSRF] 检查失败,因为在标头中找不到令牌

我认为这里的答案中提到了一个类似的问题即会话正在刷新,但我认为它会在请求本身中有令牌,通过测试,然后加载一个新会话。任何想法如何修复,或如何获取令牌并将其“插入”到 Controller 方法中的必要位置?

4

0 回答 0