我有一个旧的Symfony 2.4应用程序(使用php 5)和标准安全性(form_login
防火墙和基于角色的授权)。我们称之为 app1 。
现在我正在创建一个新的Symfony 3.3应用程序(php 7),我想使用保持会话,以便用户可以无缝地从一个切换到另一个。我们称之为 app2 。用户的身份验证和存储仍将由 app1 管理。
这些应用托管在同一个域,不同的子域中。我设法将 app1 会话文件分享到 app2 (使用Docker卷)。
以下是两个应用的会话配置:
framework:
session:
handler_id: session.handler.native_file
save_path: '%kernel.root_dir%/../var/sessions/%kernel.environment%'
cookie_domain: myapp.dev
因此,当我登录 app1 时,我也希望被视为已登录 app2 。
我看到 app2 发送了正确的Cookie,但崩溃说:
警告:类__PHP_Incomplete_Class没有反序列化器
它实际上是尝试从会话中反序列化 app1 的用户,但在 app2 中没有相关的User
实现。
app2 如何知道我已登录 app1 ?
答案 0 :(得分:1)
显然,你不能在不共享课程的情况下共享会话文件,考虑到版本之间的差距,这几乎不是一种选择。
在一般情况下,您需要使用单点登录系统之一 - OAuth2,OpenId等。 https://github.com/FriendsOfSymfony/FOSOAuthServerBundle
或者您可以手动执行此操作,这需要更多编码,但可以根据您的需求进行定制,并可能降低运营成本。在这种情况下,您的app1应提供API以通过sessionId返回用户信息,并且app2应实现自定义身份验证以查询此API。 API不应公开,只能用于app2容器。