我可以阻止Symfony安全组件使用会话吗?



我正在制作一个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?

最新更新