Symfony 3.4功能测试:认证失效,访问/transactions返回302而非200
嘿,遇到登录后访问/transactions返回302重定向的问题确实挺闹心的,我结合FOSUserBundle的常见使用场景,给你梳理几个排查方向:
先确认登录是否真的生效了
302通常意味着服务器认为你没登录,所以先验证登录状态是关键:
- 用浏览器开发者工具(Network标签)看登录请求的响应:检查有没有返回
Set-Cookie头,里面是否包含session相关的cookie(比如PHPSESSID)。如果没有,说明session没正确创建,登录根本没完成。 - 测试自带页面:登录后直接访问FOSUserBundle的
/profile页面,如果这个页面也返回302,那问题肯定出在登录环节;如果/profile能正常打开(200状态码),那问题就聚焦在/transactions路由的配置上。
检查/transactions的权限控制配置
FOSUserBundle依赖Symfony的安全组件,权限规则写错很容易导致重定向:
- 打开
config/packages/security.yaml,看access_control部分,确认/transactions的规则是否正确:access_control: # 确保这条规则正确设置了所需角色,比如ROLE_USER - { path: ^/transactions, roles: ROLE_USER } # 别忘了把登录页设为允许匿名访问 - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - 注意规则顺序:Symfony会匹配第一个符合的规则,所以要把更具体的路径(比如
^/transactions)放在更通用的规则前面,避免被其他规则覆盖。
排查Session配置问题
Session没正常工作的话,登录状态根本没法保持:
- 检查
config/packages/framework.yaml里的session配置:framework: session: handler_id: null cookie_secure: auto # 本地开发可以改成false,避免HTTPS问题导致cookie无法保存 cookie_samesite: lax - 确认访问
/transactions时,请求头里是否带了登录时设置的session cookie。如果没带,服务器识别不到你的登录状态,自然会重定向到登录页。
检查登录后的重定向逻辑
FOSUserBundle的默认重定向规则可能和你的预期冲突:
- 看
security.yaml里的form_login配置:firewalls: main: form_login: provider: fos_userbundle login_path: fos_user_security_login check_path: fos_user_security_check always_use_default_target_path: false # 如果设为true,会强制跳转到default_target_path default_target_path: / - 如果你自定义了
AuthenticationSuccessHandler,一定要检查里面的逻辑,有没有错误地强制重定向到其他页面,而不是让请求继续访问/transactions。
检查自定义登录相关代码
如果你重写了FOSUserBundle的控制器或处理器,可能哪里出错了:
- 确认你的用户实体正确实现了
UserInterface,getRoles()方法返回的角色里包含ROLE_USER(或者你在权限规则里设置的角色)。 - 检查重写的
SecurityController或认证处理器,有没有正确设置用户的认证状态,比如有没有调用$tokenStorage->setToken($token)来保存认证信息。
一步步排查下来,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者olek07
相关产品推荐
相关产品推荐

