Skip to content

Commit 62e28e4

Browse files
chore: regenerate access token function
1 parent f40103a commit 62e28e4

File tree

3 files changed

+32
-21
lines changed

3 files changed

+32
-21
lines changed

index.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// Routers
1414
$app->post('/login/', [UserController::class, 'login']);
1515
$app->get('/logout/', [UserController::class, 'logout'])->add(Authorization::class);
16+
$app->post('/refreshtoken/', [UserController::class, 'regenerateAccessToken']);
1617
$app->group('/category', CategoryRouter::class)->add(Authorization::class);
1718
$app->group('/user', UserRouter::class)->add(Authorization::class);
1819

src/Controller/AbstractAuthController.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
declare(strict_types=1);
33
namespace RestJS\Controller;
44

5+
use Firebase\JWT\JWT;
6+
use Firebase\JWT\Key;
57
use RestJS\Message\Response;
68
use function RestJS\errorHandler;
79
use 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
}

src/Middleware/AbstractAuthMiddleware.php

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,7 @@ public function __construct($user) {
2323
public function process(Request $req, RequestHandler $handler): ResponseInterface {
2424

2525
/** User Access Token */
26-
$token = $_COOKIE['SSID'] ?? str_replace('Bearer ', '', $req->getHeader('Authorization'))[0] ?? $req->getQueryParams()['accessToken'] ?? null;
27-
28-
/** Server Access Token */
29-
$refreshToken = $_COOKIE['RTID'] ?? null;
30-
31-
// Genrate Access Token to Refresh Token
32-
if ($refreshToken && !$token):
33-
34-
/** Decode Json Web Token */
35-
$decodedToken = (array) JWT::decode($refreshToken, new Key($_ENV['REFRESH_TOKEN_SECRET'], 'HS256'));
36-
37-
/** Check User Entity */
38-
$user = $this->_user->findById($decodedToken['id']);
39-
40-
/** Generated Access Token */
41-
$accessToken = $user->generateAccessToken();
42-
43-
// Add Authorization Cookies
44-
setcookie('SSID', $accessToken, time() + 60 * (int) $_ENV['ACCESS_TOKEN_EXPIRY'], path: '/', secure: true, httponly: true);
45-
$token = $accessToken;
46-
endif;
26+
$token = str_replace('Bearer ', '', $req->getHeader('Authorization'))[0] ?? $req->getQueryParams()['accessToken'] ?? null;
4727

4828
if (!$token)
4929
throw new HttpUnauthorizedException($req, 'Unauthorized request');

0 commit comments

Comments
 (0)