我正在 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 方法中的必要位置?