Symfony 5.3登录提示提交密码为空错误排查与解决
问题根因
- 核心报错原因:登录模板的密码输入框
name属性与安全配置不匹配,导致后端无法接收到提交的密码参数,直接触发「提交的密码不能为空」的BadCredentialsException。 - 日志中「认证器不支持当前请求」的提示分两种情况:
- 自定义
AppCustomAuthenticator为API Token认证器,仅处理带X-AUTH-TOKEN请求头的接口请求,普通网页表单请求不触发为正常逻辑,不属于错误。 - 表单登录认证器
FormLoginAuthenticator未识别到有效登录请求,和控制器路由注解语法错误、参数不匹配有关。
- 自定义
- 额外存在路由注解语法错误、冗余配置问题,会干扰正常请求匹配。
修复步骤
- 修正登录模板密码字段参数
打开templates/security/login.html.twig,找到密码输入框代码,将name="password"改为与security.yaml配置一致的name="_password":
{# 修改前 #} <input class="form-control" type="password" id="_password" name="password"/> {# 修改后 #} <input class="form-control" type="password" id="_password" name="_password"/>
- 修复控制器路由注解语法错误
打开src/Controller/SecurityController.php,找到login方法的路由注解,删除末尾多余的右方括号:
// 修改前 /** * @Route("/login", name="login", methods={"GET","POST"})] * */ // 修改后 /** * @Route("/login", name="login", methods={"GET","POST"}) */
- (可选优化)清理冗余/不规范配置
- 模板中多余的
_target_path隐藏域可删除,你已经在安全配置中指定跳转参数为go_to,重复配置不会生效还可能造成逻辑混淆。 - 如果当前项目不需要API Token认证能力,可将
App\Security\AppCustomAuthenticator从security.yaml的custom_authenticators配置项中移除,减少每次请求的无效判断。 - 退出登录路由建议改为POST请求,符合Symfony安全规范,避免GET请求被恶意触发导致意外登出:
- 修改控制器logout方法的路由注解,限定请求方法为POST:
/** * @Route("/logout", name="logout", methods={"POST"}) */- 将模板中的退出登录链接改为POST表单提交按钮即可。
- 生效验证
开发环境可直接刷新页面测试,生产环境执行命令清除缓存:
php bin/console cache:clear
提交正确的账号密码即可完成正常登录。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

