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()) {