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

问题描述

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

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

如果框架只为每个请求调用我的用户提供程序,而根本不使用会话(这也让我不必担心会话劫持),我会很高兴,但从文档中没有似乎是这样的选择。

如果这不可能,在反序列化时重新附加代理实体是否可行?用户类 serialize 方法没有用,因为实体管理器在那里不可用。有我可以订阅/收听的活动吗?

附言我正在使用捆绑授权功能,我不想禁用整个捆绑。

解决方法

是的,您可以禁用会话。

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

更多关于这里的信息:https://symfony.com/doc/4.4/security/guard_authentication.html

您可以完全禁用会话,将此添加到 framework.yaml

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...