@@ -54,7 +54,6 @@ private function finalizeLogin(User $user, string $token): void
5454 {
5555 // part of the token is stored in the database, suffix goes into our token (payload)
5656 $ tokenSuffix = $ user ->setRecodexToken ($ token );
57- $ user ->updatedNow ();
5857 $ this ->users ->persist ($ user );
5958
6059 // generate our token for our frontend
@@ -100,6 +99,7 @@ public function actionDefault()
10099 } else {
101100 $ recodexUser ->updateUser ($ user );
102101 }
102+ $ user ->updatedNow ();
103103
104104 $ this ->finalizeLogin ($ user , $ recodexResponse ['accessToken ' ]);
105105 }
@@ -127,13 +127,27 @@ public function checkRefresh()
127127 */
128128 public function actionRefresh ()
129129 {
130+ // We need to inject the token manually here (this class is not derived from BasePresenterWithApi)
131+ $ user = $ this ->getCurrentUser ();
132+ $ prefix = $ user ->getRecodexToken ();
133+ $ suffix = $ this ->getAccessToken ()->getPayloadOrDefault ('suffix ' , null );
134+
135+ if (!$ prefix || !$ suffix ) {
136+ throw new ForbiddenRequestException ("Cannot refresh token - user does not have a ReCodEx token. " );
137+ }
138+
139+ // Call ReCodEx API to refresh the token
140+ $ this ->recodexApi ->setAuthToken ($ prefix . $ suffix );
130141 $ recodexResponse = $ this ->recodexApi ->refreshToken ();
131142 /** @var RecodexUser */
132143 $ recodexUser = $ recodexResponse ['user ' ];
133144
134- // Update the user entity with new info from ReCodEx.
135- $ user = $ this ->users ->findOrThrow ($ recodexUser ->getId ());
136- $ recodexUser ->updateUser ($ user );
145+ // Update the user entity if the token uses the same identity as the user
146+ // (token may use identity override, in which case we do not want to update the user)
147+ if ($ recodexUser ->getId () === $ user ->getId ()) {
148+ $ recodexUser ->updateUser ($ user );
149+ $ user ->updatedNow ();
150+ }
137151
138152 $ this ->finalizeLogin ($ user , $ recodexResponse ['accessToken ' ]);
139153 }
0 commit comments