Symfony 4切换生产模式后后台登录失败且无日志输出问题
排查&解决步骤
第一步:先解决日志不生成问题
- 检查
var/目录权限:web服务运行用户(通常为www-data、nginx)需要对该目录有读写权限,执行以下命令修复(根据实际运行用户替换):sudo chown -R www-data:www-data var/ sudo chmod -R 775 var/ - 检查monolog日志配置:确认
config/packages/prod/monolog.yaml的输出路径没有被修改,默认会生成日志到var/log/prod.log。 - 临时开启生产环境debug:修改
.env文件的APP_DEBUG=1,复现问题后可直接在页面看到报错信息,排查完成后记得改回0关闭debug。
第二步:修复后台登录失效问题
你贴的代码存在两处核心配置冲突,是dev正常生产失效的直接原因:
用户提供者查询字段不匹配
你的security.yaml中admin用户提供者配置的是用username字段查询用户,但自定义的AdminAuthenticator全程用email字段做登录查询:# 原错误配置 adminusers: entity: class: App\Entity\AdminUser property: username这会导致登录成功后,Symfony从session重载用户时,尝试用
username字段匹配你存储的email值,查不到用户就直接清空登录状态跳回登录页。dev环境因为缓存未完全生效,所以不会触发这个校验逻辑。
修复方法:将adminusers的查询字段改为email# 修复后配置 adminusers: entity: class: App\Entity\AdminUser property: email防火墙验证逻辑冲突
admin防火墙同时配置了原生form_login和自定义Guard验证器,两套逻辑冲突导致验证结果被覆盖。你需要在admin防火墙下显式指定使用自定义的AdminAuthenticator,同时删除冗余的form_login配置:admin: anonymous: ~ provider: adminusers pattern: ^/admin/ guard: authenticators: - App\Security\AdminAuthenticator logout: path: /admin/logout target: /admin/login
最后生效操作
生产环境修改配置后必须清除缓存才会生效,执行命令:
php bin/console cache:clear --env=prod
内容的提问来源于stack exchange,提问作者MMMWeirdo
相关产品推荐
相关产品推荐

