我有一个应用程序,由运行 React 的前端服务器和运行 PHP/Symfony 的后端服务器组成。前端的一部分是使用 twig 模板开发的(主要是用于更新内容的后台表单),并由同一后端服务器处理,一部分是使用 React 开发的,驻留在单独的前端服务器中(供公共使用)用户访问,具有更多功能)。
该系统具有三个用户角色:超级管理员(通过针对 Symfony 中配置的内存用户的表单进行身份验证)、后台员工(通过针对数据库中的用户实体的相同表单进行身份验证)和“公共用户”之类的发言,它使用应用程序的公共端,通过第三方服务进行身份验证,最终要求我们使用类似于以下的代码在我们的 API 之一内启动会话:
$token = new UsernamePasswordToken($publicUserEntity, null, 'main', $publicUserEntity->getRoles());
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
用户通过三种方式成功进行身份验证,但只有在后端服务器中才能打开会话,而从前端服务器发出请求时则不会打开会话。
例如,在我使用公共用户登录后,如果我提出请求:
http://backendserverhost/api/someentity/me
该 API 加载当前会话的用户 ID 以获取用户的数据,并且我根据经过身份验证的用户获得正确的响应。
但是,如果我从前端服务器(到相同的 API 和相同的端点)发出相同的请求以获取相同的信息并显示它,它会返回一个错误,就好像它是匿名用户一样。
我应该做哪些更改才能“使用”后端服务器中打开的会话来发出前端服务器请求?