我正在制作一个web应用程序,其中身份验证将在php之外完成每个单独的请求。我本来打算根本不使用会话,但是安全组件正在利用它。
此外,user对象本身不是Doctrine实体,但它有一个属性是实体。这会导致问题,因为当用户从会话中反序列化时,该属性的值是一个分离的代理,使其不可用。
如果框架为每个请求调用我的用户提供程序,而根本不使用会话,我会很高兴的(这也会让我停止担心会话劫持),但从文档中似乎没有这样的选项。
如果不可能,是否可以在反序列化时重新附加代理实体?用户类serialize
方法是无用的,因为实体管理器在那里不可用。有我可以订阅/收听的活动吗?
注:我正在使用bundle授权特性,我不希望不得不禁用整个bundle。
是,您可以禁用会话。
在您的安全组件配置的security.yaml
中的firewalls
选项下,您可以为您需要无状态的防火墙添加stateless: true
。
更多信息在这里:https://symfony.com/doc/4.4/security/guard_authentication.html
你可以完全禁用会话添加到framework.yaml
# config/packages/framework.yaml
session:
enabled: false
更多关于会议的信息:https://symfony.com/doc/current/session.html#configuration
如果你反序列化User对象并获得分离的代理类,你可以尝试在你的UserProvider中$entityManager->refresh($object)
它-这应该是一个服务?或者再次取回,假设你有它的ID?