在 FOSUserBundle 和 Symfony2.1 注册前后保持相同的会话
Posted
技术标签:
【中文标题】在 FOSUserBundle 和 Symfony2.1 注册前后保持相同的会话【英文标题】:Keep same session before and after registration with FOSUserBundle and Symfony2.1 【发布时间】:2014-01-01 16:59:42 【问题描述】:我正在处理购物车,但遇到了 FOSuserBundle 注册流程问题:
我的用户可以将他们想要的任何东西添加到他们的购物车中,无论是否登录/注册,但在结帐之前,我希望他们登录/注册。
最重要的是,我希望在登录/注册后他们可以取回之前的购物车。为了实现它,我将一个随机密钥保存到用户会话中,并将这个随机密钥与所有文章数据一起保存在数据库中。
我的登录流程没有问题,会话保持不变(symfony 保留所有会话数据),所以用户检索他的会话,但我的问题是注册。
当用户想要结账但还没有账户时,需要注册,注册完成后(使用FosuserBundle,通过邮件发送激活链接)用户会话完全重置,购物车丢失但并没有真正消失:实际上,我观察到的一件奇怪的事情是浏览器似乎同时处理 2 个不同的会话,但是在 2 个单独的选项卡中,在旧的浏览器选项卡中(注册之前),数据仍然在这里,但是在新标签中,会话被清除
所以我的问题是,在 Symfony2.1 中成功注册并使用 FosUserBundle 后,有没有办法将会话归还给用户?
提前谢谢你
【问题讨论】:
【参考方案1】:我的安全配置文件是原因
我必须将选项 session_fixation_strategy 设置为“迁移”,现在可以完美运行,谢谢
【讨论】:
【参考方案2】:登录/注销由 symfony 的 2 安全组件处理,而注册由 FosUserBundle 处理。
您可以尝试覆盖注册处理程序https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md 并迁移您的旧会话:http://symfony.com/doc/current/components/http_foundation/sessions.html#session-api
【讨论】:
谢谢你,artworkad,但由于其他原因,我已经覆盖了 FOSUserBundle 注册控制器,并且在这个控制器内部没有办法处理会话迁移/重新生成,它似乎不是那个地方处理它以上是关于在 FOSUserBundle 和 Symfony2.1 注册前后保持相同的会话的主要内容,如果未能解决你的问题,请参考以下文章
在验证用户与 Symfony 4 和 FOSUserBundle 连接后重定向用户
Hwi oauth bundle 和 Symfony 3.4 无法自动装配服务:如何在 symfony 3.4 + FOSUserBundle 中使用 hwi/oauth-bundle
FOSUserBundle 使用电子邮件登录 (Symfony2)