Fixed logging in users that no longer exist

This commit is contained in:
Marcin Kurczewski 2014-09-05 09:37:53 +02:00
parent de31770c87
commit 7a8badd2ed
3 changed files with 9 additions and 0 deletions

View file

@ -18,4 +18,9 @@ class TokenDao extends AbstractDao
{ {
$this->collection->remove(['name' => $tokenName]); $this->collection->remove(['name' => $tokenName]);
} }
public function deleteByAdditionalData($additionalData)
{
$this->collection->remove(['additionalData' => $additionalData]);
}
} }

View file

@ -74,6 +74,8 @@ class AuthService
$this->loginToken = $loginToken; $this->loginToken = $loginToken;
$this->loggedInUser = $this->userDao->getById($loginToken->additionalData); $this->loggedInUser = $this->userDao->getById($loginToken->additionalData);
if (!$this->loggedInUser)
throw new \Exception('User was deleted.');
$this->updateLoginTime($this->loggedInUser); $this->updateLoginTime($this->loggedInUser);
if (!$this->loggedInUser) if (!$this->loggedInUser)
@ -133,6 +135,7 @@ class AuthService
$loginToken->name = hash('sha256', $user->name . '/' . microtime(true)); $loginToken->name = hash('sha256', $user->name . '/' . microtime(true));
$loginToken->additionalData = $user->id; $loginToken->additionalData = $user->id;
$loginToken->purpose = \Szurubooru\Entities\Token::PURPOSE_LOGIN; $loginToken->purpose = \Szurubooru\Entities\Token::PURPOSE_LOGIN;
$this->tokenDao->deleteByAdditionalData($loginToken->additionalData);
$this->tokenDao->save($loginToken); $this->tokenDao->save($loginToken);
return $loginToken; return $loginToken;
} }

View file

@ -51,6 +51,7 @@ class AuthServiceTest extends \Szurubooru\Tests\AbstractTestCase
$testUser->name = 'dummy'; $testUser->name = 'dummy';
$testUser->passwordHash = 'hash'; $testUser->passwordHash = 'hash';
$this->userDaoMock->expects($this->once())->method('getByName')->willReturn($testUser); $this->userDaoMock->expects($this->once())->method('getByName')->willReturn($testUser);
$this->tokenDaoMock->expects($this->once())->method('deleteByAdditionalData')->with($testUser->id);
$authService = $this->getAuthService(); $authService = $this->getAuthService();
$authService->loginFromCredentials('dummy', 'godzilla'); $authService->loginFromCredentials('dummy', 'godzilla');