@@ -53,6 +53,12 @@ class User
5353	/** @var IAuthorizator|null */ 
5454	private  $ authorizator ;
5555
56+ 	/** @var IIdentity|null|false  false means undefined */ 
57+ 	private  $ identity ;
58+ 
59+ 	/** @var bool|null */ 
60+ 	private  $ authenticated ;
61+ 
5662
5763	public  function  __construct (IUserStorage   $ storage , IAuthenticator   $ authenticator  = null , IAuthorizator   $ authorizator  = null )
5864	{
@@ -84,6 +90,8 @@ public function login($user, string $password = null): void
8490		}
8591		$ this  ->storage ->setIdentity ($ user );
8692		$ this  ->storage ->setAuthenticated (true );
93+ 		$ this  ->identity  = $ user ;
94+ 		$ this  ->authenticated  = true ;
8795		$ this  ->onLoggedIn ($ this  );
8896	}
8997
@@ -96,9 +104,11 @@ final public function logout(bool $clearIdentity = false): void
96104		if  ($ this  ->isLoggedIn ()) {
97105			$ this  ->onLoggedOut ($ this  );
98106			$ this  ->storage ->setAuthenticated (false );
107+ 			$ this  ->authenticated  = false ;
99108		}
100109		if  ($ clearIdentity ) {
101110			$ this  ->storage ->setIdentity (null );
111+ 			$ this  ->identity  = null ;
102112		}
103113	}
104114
@@ -108,7 +118,10 @@ final public function logout(bool $clearIdentity = false): void
108118	 */ 
109119	final  public  function  isLoggedIn (): bool 
110120	{
111- 		return  $ this  ->storage ->isAuthenticated ();
121+ 		if  ($ this  ->authenticated  === null ) {
122+ 			$ this  ->authenticated  = $ this  ->storage ->isAuthenticated ();
123+ 		}
124+ 		return  $ this  ->authenticated ;
112125	}
113126
114127
@@ -117,7 +130,10 @@ final public function isLoggedIn(): bool
117130	 */ 
118131	final  public  function  getIdentity (): ?IIdentity 
119132	{
120- 		return  $ this  ->storage ->getIdentity ();
133+ 		if  ($ this  ->identity  === false ) {
134+ 			$ this  ->identity  = $ this  ->storage ->getIdentity ();
135+ 		}
136+ 		return  $ this  ->identity ;
121137	}
122138
123139
0 commit comments