Symfony检查用户是否经过身份验证

时间:2017-03-19 19:44:26

标签: php symfony

在我的Symfony项目中,我在UserInterface实体中使用User来处理身份验证。我还使用EquatableInterface来检查用户的电子邮件是否在他登录时发生了更改。

public function isEqualTo(UserInterface $user)
{
    if (!$user instanceof Account) {
        return false;
    }
    if ($this->email !== $user->getEmail()) {
        return false;
    }
    return true;
}

一切正常,但是当我在数据库中更改用户的电子邮件时,我没有注销,只是未经过身份验证,如下面的屏幕截图所示。

https://s15.postimg.org/6md5htszf/22781921b8.png

所以我知道如果用户通过身份验证,我该如何检查控制器?当isEqualTo返回false时,如何强制用户注销?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案,如果其他人遇到同样的问题我想分享。

要检查用户是否经过身份验证,我们需要由TokenInterface实施的TokenStorage。然后我们只需要调用isAuthenticated()方法。

$tokenInterface = $this->get('security.token_storage')->getToken();
$isAuthenticated = $tokenInterface->isAuthenticated()

答案 1 :(得分:0)

快速方法:在linkgetUser中查看方法Symfony\Bundle\FrameworkBundle\Controller。如果您在服务中的某个位置需要此行为,请使用security.token_storage服务作为依赖项。

尝试方法(类似symfony):你需要使用Symfony Security Voters