比较两个身份验证令牌的最佳方法

时间:2014-12-12 13:26:26

标签: symfony

请考虑以下示例:http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html#the-listener

我想查看新的经过身份验证的令牌是否与当前登录的用户相同。见下文。

try {
    $currentToken = $this->securityContext->getToken(); 
    $authToken = $this->authenticationManager->authenticate($token);

    // What is the best way to compare these two? Both implement TokenInterface.
    if ([compare tokens]) {
        // already logged in
        return;
    }

    $this->tokenStorage->setToken($authToken);

    return;
} catch (AuthenticationException $failed) {
}

我考虑过比较UserInterface->getUsername()

if ($currentToken->getUser()->getUsername() === $authToken->getUser()->getUsername()) { 

但是想知道是否有更好的解决方案......

2 个答案:

答案 0 :(得分:0)

我假设两个用户对象不是同一个引用。因为如果他们是你可以使用===比较它们来检查它们是否相同。

鉴于用户名是唯一的,这是检查它是否是同一用户的一种方法。 但在某些系统中,用户名不必是唯一的。所以比较id可能会更好,因为它们应该是唯一的。

答案 1 :(得分:0)

如何利用他们在authenticate()函数中显示的代码?

$currentUser = $this->userProvider->loadUserByUsername($currentToken->getUsername());

然后

$tokenUser = $this->userProvider->loadUserByUsername($authToken->getUsername());

然后

if ($currentUser == $tokenUser) {