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

Symfony 6 用户端登录生产环境失效问题求助

问题排查:生产环境用户端登录后重定向回登录页

问题现象

  • 用户端登录地址:https://www.********/login,开发环境正常可用,但生产环境登录后仅重定向回登录页,无任何错误提示
  • 管理员端登录地址:https://www.********/admin/login,开发与生产环境均正常
  • 已排查动作:切换环境、调整配置片段、确认onAuthenticationSuccess返回正确的RedirectResponse,但后续仍触发重定向

现有Security配置

security:
    enable_authenticator_manager: true

providers:
    users:
        mongodb:
            class: 'App\Document\User\User'
            property: 'username'
            
password_hashers:
    App\Document\User\User:
        algorithm: auto
        
erase_credentials: false

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
        
    admin:
        pattern:    ^/admin         
        logout:
            path: public_logout_admin        
        form_login:
            login_path: public_login_admin
            check_path: public_login_admin
            default_target_path: admin_prepaid_order_list
        switch_user: { role: ROLE_ADMIN }
        access_denied_handler: App\Security\AccessDeniedHandler
        user_checker: App\Security\UserChecker
        
    main:
        pattern:    ^/    
        logout:
            path: public_logout                         
        form_login:
            login_path: public_login
            check_path: public_login
            default_target_path: business_browse_top_categories                
        switch_user: { role: ROLE_ADMIN }
        access_denied_handler: App\Security\AccessDeniedHandler
        user_checker: App\Security\UserChecker 

access_control:
    - { path: '^/login', roles: PUBLIC_ACCESS }
    - { path: '^/signup', roles: PUBLIC_ACCESS }
    - { path: '^/password-reset', roles: PUBLIC_ACCESS }
    - { path: '^/business', roles: ROLE_BUSINESS }
    
    - { path: '/admin/login', roles: PUBLIC_ACCESS }
    - { path: '/admin/logout', roles: PUBLIC_ACCESS }
    - { path: '^/admin', roles: ROLE_ADMIN }
    
role_hierarchy:        
    ROLE_BUSINESS_TERMS_ACCEPTED: ROLE_BUSINESS        
    ROLE_BUSINESS_ACCEPTED: ROLE_BUSINESS_TERMS_ACCEPTED        
    ROLE_ADMIN: [ROLE_BUSINESS_ACCEPTED, ROLE_ALLOWED_TO_SWITCH]    

排查方向与解决方案

1. 优先查看生产环境日志

直接检查var/log/prod.log,搜索登录相关请求的日志记录,重点关注:

  • 认证成功后的访问拒绝日志(AccessDeniedException)
  • 会话存储/ Cookie相关错误
  • UserChecker抛出的状态异常(如DisabledException)

2. 检查UserChecker逻辑

两个防火墙共用App\Security\UserChecker,重点调试checkPostAuthentication方法:

  • 是否在生产环境对普通用户添加了额外校验(如用户激活状态、条款同意状态)
  • 若校验不通过,是否抛出了AccountStatusException子类异常——这类异常会触发Symfony自动重定向回登录页,且默认不显示错误提示

3. 会话配置问题

生产环境会话配置可能与开发环境不一致,检查config/packages/prod/framework.yaml:

  • 确保HTTPS环境下会话Cookie配置正确:
    framework:
        session:
            cookie_secure: auto
            cookie_same_site: lax
    
  • 若站点部署在反向代理后,需添加:
    framework:
        trust_proxy_headers: true
    
    否则Symfony无法正确识别客户端HTTPS状态,导致会话Cookie无法被浏览器保存

4. 用户角色与权限验证

  • 确认生产环境普通用户是否拥有ROLE_BUSINESS角色(或更高层级角色),access_control中^/business路径要求该角色权限
  • 检查角色层级配置,确保普通用户角色未被错误限制

5. CSRF令牌验证

  • 确认用户端登录表单正确渲染CSRF令牌({{ form_widget(form._token) }})
  • 检查生产环境日志中是否存在CSRF令牌无效的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:36