Symfony3更新用户数据并使当前会话无效

时间:2017-04-29 15:27:27

标签: php symfony session symfony-3.2

据我所知,当用户成功登录时,Symfony会在User或数据库提供程序中保留session.handler.native_file文档/实体的副本,无论哪个配置。在将来的请求中,将使用cookie中保存的会话ID检索此信息。

我的问题是用户更新其密码或用户名(即他们的电子邮件),以前在不同计算机或浏览器上打开的会话过期或设置为无效。

EquatableInterface假设要对此进行检查,但它并不适合我。我将以下存根添加到User类:

#User.php
public function isEqualTo(UserInterface $user)
{
    return false;
}

随后刷新浏览器没有任何改变。我的会话仍然有效,并使用User检查dump($this->getUser())抓取给了我当前更新的User,而不是在会话开始时存储的那个。

我尝试使用:

#security.yml
security:
    always_authenticate_before_granting: true

如果它会做任何事情,但它确实没有效果。

使用 Symfony Profiler ,我看到每次执行请求时都会从数据库中获取User,我想知道它是否在此时{{1}只是更新了UserProviderInterface中的用户,而不是在必要时首先检查对结束会话的更改。

为了确保这种情况发生,我在两个不同的浏览器上测试了这个控制器:

security.token_storage

我在两个浏览器上登录我的应用程序,然后在浏览器A上注销。我将#SomeController.php public function indexAction() { $encoder = $this->get('security.password_encoder'); $user = $this->getUser(); $flag = $encoder->isPasswordValid($user, 'MY_NEW_PASSWORD'); dump($flag); return []; } 密码更改为User,只刷新浏览器B.转储为'MY_NEW_PASSWORD'新密码。

如果是这种情况,我想知道: - 在trueUser获取security.token_storage之前,是否有权在授予授权之前对数据库进行检查? (这是一个在我想的fetch事件上运行的服务。)

或者我可能会对复杂的东西感到困惑,并且有一个超级简单的解决方案,我只是想通了= |

0 个答案:

没有答案