Symfony2 断开/注销一个用户(不是当前用户)


symfony2 disconnect/logout one user (not the current user)

在我的应用程序中,我确实需要以编程方式断开用户连接。不是当前用户,而是另一个知道其 id 的用户。我正在使用FOSUserBundle,但我想这对任何提供商都有好处。

令牌和会话是相对于当前用户的,我猜存储在其计算机上。

那么,我该怎么做呢?

这里有与 som 相关的帖子,但响应与请求不匹配:FOSUserBundle/Symfony2:在给定用户(不是当前登录的用户)的情况下强制注销用户

只有当您

不使用本机 php 会话处理程序(这是 symfony 中的默认值)时,才有可能。在这种情况下,您不知道其他用户的会话 ID。

您可以做到这一点的方法是使用数据库作为会话存储 - symfony.com 上有一个操作方法。一旦将会话存储在数据库中,销毁用户的会话只是从数据库中删除正确的行。

是的 - FosUserBundle在这里无关,它不是特定于此捆绑包的

我所知,每次加载页面时,会话中的用户都会与数据库中的相应用户进行比较。如果比较返回 false,则强制用户再次登录。

FOSUserBundle 序列化要存储在会话上的一堆用户数据,包括enabled字段。这意味着,如果将用户enabled状态设置为false,则在下一页加载时,会话enabled将不等于数据库enabled这意味着用户不相等,导致用户需要再次登录。

要在没有 FOSUSerBundle 的情况下执行此操作,您只需要在用户管理系统中包含某种enabled字段,然后在序列化的每个页面加载(或在文档中所示的isEqualTo中)检查该字段,然后您可以在下一页加载时注销人员。