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

Symfony 比较两个身份验证令牌的最佳方法,symfony,Symfony,考虑以下示例: 我想看看新的认证令牌是否与当前登录用户的相同。见下文 try { $currentToken = $this->securityContext->getToken(); $authToken = $this->authenticationManager->authenticate($token); // What is the best way to compare these two? Both implement Token

考虑以下示例:

我想看看新的认证令牌是否与当前登录用户的相同。见下文

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:


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

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

如果用户名是唯一的,那么这是检查它是否是同一个用户的一种方法。
但在某些系统中,用户名不必是唯一的。因此,比较id可能更好,因为它们应该总是唯一的。

如何利用它们在authenticate函数中显示的代码

$currentUser=$this->userProvider->loadUserByUsername$currentToken->getUsername

然后

$tokenUser=$this->userProvider->loadUserByUsername$authToken->getUsername

然后


如果$currentUser==$tokenUser{

否,则它们不是相同的引用。此外,UserInterface没有id属性。即使该接口没有id属性,只要用户类具有getId函数,就可以使用该比较-如果$currentToken->getUser->getId==$authToken->getUser->getId==$authToken->getUser->getId{啊,当然,忘了他们没有getId。如果用户名不是唯一的,你可以使用email字段。@JasonRoman接口是作为一个合同存在的,它保证了方法的可用性。只使用getId,因为你的实体有一个违反了这个合同。
if ($currentToken->getUser()->getUsername() === $authToken->getUser()->getUsername()) {