请考虑以下示例: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()) {
但是想知道是否有更好的解决方案......
答案 0 :(得分:0)
我假设两个用户对象不是同一个引用。因为如果他们是你可以使用===
比较它们来检查它们是否相同。
鉴于用户名是唯一的,这是检查它是否是同一用户的一种方法。 但在某些系统中,用户名不必是唯一的。所以比较id可能会更好,因为它们应该是唯一的。
答案 1 :(得分:0)
如何利用他们在authenticate()函数中显示的代码?
$currentUser = $this->userProvider->loadUserByUsername($currentToken->getUsername());
然后
$tokenUser = $this->userProvider->loadUserByUsername($authToken->getUsername());
然后
if ($currentUser == $tokenUser) {