You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 5.3登录提示提交密码为空错误排查与解决

问题根因
  • 核心报错原因:登录模板的密码输入框name属性与安全配置不匹配,导致后端无法接收到提交的密码参数,直接触发「提交的密码不能为空」的BadCredentialsException。
  • 日志中「认证器不支持当前请求」的提示分两种情况:
    • 自定义AppCustomAuthenticator为API Token认证器,仅处理带X-AUTH-TOKEN请求头的接口请求,普通网页表单请求不触发为正常逻辑,不属于错误。
    • 表单登录认证器FormLoginAuthenticator未识别到有效登录请求,和控制器路由注解语法错误、参数不匹配有关。
  • 额外存在路由注解语法错误、冗余配置问题,会干扰正常请求匹配。
修复步骤
  1. 修正登录模板密码字段参数
    打开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"/>
  1. 修复控制器路由注解语法错误
    打开src/Controller/SecurityController.php,找到login方法的路由注解,删除末尾多余的右方括号:
// 修改前
/**
* @Route("/login", name="login", methods={"GET","POST"})]
* 
*/

// 修改后
/**
* @Route("/login", name="login", methods={"GET","POST"})
*/
  1. (可选优化)清理冗余/不规范配置
  • 模板中多余的_target_path隐藏域可删除,你已经在安全配置中指定跳转参数为go_to,重复配置不会生效还可能造成逻辑混淆。
  • 如果当前项目不需要API Token认证能力,可将App\Security\AppCustomAuthenticator从security.yaml的custom_authenticators配置项中移除,减少每次请求的无效判断。
  • 退出登录路由建议改为POST请求,符合Symfony安全规范,避免GET请求被恶意触发导致意外登出:
    1. 修改控制器logout方法的路由注解,限定请求方法为POST:
    /**
    * @Route("/logout", name="logout", methods={"POST"})
    */
    
    1. 将模板中的退出登录链接改为POST表单提交按钮即可。
  1. 生效验证
    开发环境可直接刷新页面测试,生产环境执行命令清除缓存:
php bin/console cache:clear

提交正确的账号密码即可完成正常登录。


内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:45:19