22declare (strict_types=1 );
33namespace RestJS \Controller ;
44
5+ use Firebase \JWT \JWT ;
6+ use Firebase \JWT \Key ;
57use RestJS \Message \Response ;
68use function RestJS \errorHandler ;
79use function RestJS \response ;
@@ -63,4 +65,32 @@ public function logout($req, $res) {
6365
6466 return response ($ req , $ res , new Response (message: "User logged out successfully. " ));
6567 }
68+
69+ /** Regenrate Access Token to Refresh Token */
70+ public function regenerateAccessToken ($ req , $ res ) {
71+
72+ /** User Refresh Token */
73+ $ refreshToken = $ req ->getParsedBody ()['refresh_token ' ] ?? null ;
74+
75+ try {
76+ /** Decode Json Web Token */
77+ $ decodedToken = (array ) JWT ::decode ($ refreshToken , new Key ($ _ENV ['REFRESH_TOKEN_SECRET ' ], 'HS256 ' ));
78+ } catch (\Exception $ e ) {
79+ $ decodedToken = null ;
80+ }
81+
82+ if (!$ decodedToken )
83+ throw new HttpUnauthorizedException ($ req , "Invalid access token " );
84+
85+ /** Check User Entity */
86+ $ user = $ this ->_model ->findById ($ decodedToken ['id ' ]);
87+
88+ /** Generated Access Token */
89+ $ accessToken = $ user ->generateAccessToken ();
90+
91+ // Add Authorization Cookies
92+ setcookie ('SSID ' , $ accessToken , time () + 60 * (int ) $ _ENV ['ACCESS_TOKEN_EXPIRY ' ], path: '/ ' , secure: true , httponly: true );
93+
94+ return response ($ req , $ res , new Response (message: "User regenrate access token successfully. " , data: ['accessToken ' => $ accessToken ]));
95+ }
6696}
0 commit comments