在 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)

Symfony2:如何实现自定义用户登录和注册——摆脱 FOSUSerBundle

Symfony 4:FOSUserBundle:覆盖控制器

获取 FOSUserBundle 组的用户 (Symfony2)