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

Can I prevent the Symfony security component from using the session at all?

我正在开发一个 Web 应用程序,其中对每个单独请求的身份验证将在 php 之外完成。我本来打算根本不使用会话,但安全组件正在使用它。

此外,用户对象本身并不是一个 Doctrine 实体,但它有一个 属性 是一个实体。这会导致问题,因为当用户从会话中反序列化时,属性 的值是一个分离的代理,使其无法使用。

如果框架只为每个请求调用我的用户提供者,而根本不使用会话(它也可以让我不再担心会话劫持),我会很高兴,但从文档中没有' 好像是这样的选择。

如果那不可能,在反序列化时重新附加代理实体是否可行? user class serialize 方法没有用,因为那里没有实体管理器。有没有我可以 subscribe/listen 参加的活动?

P.S。我正在使用捆绑包授权功能,我不想禁用整个捆绑包。

是的,您可以禁用 session。

security.yaml 安全组件配置的 firewalls 选项下,您可以为需要无状态的防火墙添加 stateless: true

更多相关信息:https://symfony.com/doc/4.4/security/guard_authentication.html

您可以禁用 session 完全将其添加到 framework.yaml

# config/packages/framework.yaml
session:
    enabled: true

更多关于 session 的信息:https://symfony.com/doc/current/session.html#configuration

如果您反序列化 User object 并获得分离的代理 class,您可以尝试 $entityManager->refresh($object) 它在您的 UserProvider 中 - 这应该是一个服务?或者甚至尝试再次获取,假设您有它的 ID?