Solved user session bug

This commit is contained in:
Kevin Frantz 2018-07-15 13:42:59 +02:00
parent 7470686c56
commit 228c261db1
2 changed files with 35 additions and 3 deletions

View File

@ -3,6 +3,9 @@ namespace core;
use entity\order\Order;
use entity\user\UserInterface;
use repository\user\User as UserRepository;
use repository\user\UserInterface as UserRepositoryInterface;
use entity\user\User;
/**
*
@ -46,8 +49,14 @@ final class Core implements CoreInterface
*/
private $basket;
/**
* @var UserRepositoryInterface
*/
private $userRepository;
public function __construct()
{
session_start();
$this->initTwig();
$this->initDatabase();
$this->initUser();
@ -70,10 +79,18 @@ final class Core implements CoreInterface
*/
private function initUser(): void
{
$this->userRepository = new UserRepository($this);
if($_SESSION['user']){
$this->user = $_SESSION['user'];
$this->user = $this->getUserBySession();
}
}
private function getUserBySession():UserInterface{
$user = new User();
$user->setPasswordHash($_SESSION['user']['hash']);
$user->setEmail($_SESSION['user']['email']);
return $this->userRepository->getUserByMailAndHash($user);
}
private function initTwig(): void
{
@ -101,9 +118,21 @@ final class Core implements CoreInterface
return $this->user;
}
private function setUserSession():void{
if($this->user){
$_SESSION['user'] = [
'email'=>$this->user->getEmail(),
'hash'=>$this->user->getPasswordHash(),
];
}else{
unset($_SESSION['user']);
}
}
public function setUser(?UserInterface $user = null): void
{
$_SESSION['user'] = $this->user = $user;
$this->user = $user;
$this->setUserSession();
}
/**

View File

@ -26,6 +26,9 @@ class CoreTest extends TestCase
protected function setUp():void{
$this->core = new Core();
$this->user = new User();
$this->user->setId(1);
$this->user->setEmail('test@mail.test');
$this->user->setPasswordHashByPassword('passwort:)');
$this->core->setUser($this->user);
}
@ -42,7 +45,7 @@ class CoreTest extends TestCase
}
public function testSession():void{
$this->assertEquals($this->core->getUser(), $_SESSION['user']);
$this->assertEquals($this->core->getUser()->getPasswordHash(), $_SESSION['user']['hash']);
}
}