Skip to content

Commit 3fa4ec3

Browse files
authored
Merge pull request #1040 from kenjis/fix-jwt-loggedIn
fix: `JWT::loggedIn()` does not remove `Bearer` prefix
2 parents a538a1a + 44e16bd commit 3fa4ec3

File tree

3 files changed

+37
-23
lines changed

3 files changed

+37
-23
lines changed

src/Authentication/Authenticators/JWT.php

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace CodeIgniter\Shield\Authentication\Authenticators;
1515

1616
use CodeIgniter\HTTP\IncomingRequest;
17+
use CodeIgniter\HTTP\RequestInterface;
1718
use CodeIgniter\I18n\Time;
1819
use CodeIgniter\Shield\Authentication\AuthenticationException;
1920
use CodeIgniter\Shield\Authentication\AuthenticatorInterface;
@@ -206,14 +207,34 @@ public function loggedIn(): bool
206207
/** @var IncomingRequest $request */
207208
$request = service('request');
208209

209-
/** @var AuthJWT $config */
210-
$config = config('AuthJWT');
210+
$token = $this->getTokenFromRequest($request);
211211

212212
return $this->attempt([
213-
'token' => $request->getHeaderLine($config->authenticatorHeader),
213+
'token' => $token,
214214
])->isOK();
215215
}
216216

217+
/**
218+
* Gets token from Request.
219+
*/
220+
public function getTokenFromRequest(RequestInterface $request): string
221+
{
222+
assert($request instanceof IncomingRequest);
223+
224+
/** @var AuthJWT $config */
225+
$config = config('AuthJWT');
226+
227+
$tokenHeader = $request->getHeaderLine(
228+
$config->authenticatorHeader ?? 'Authorization'
229+
);
230+
231+
if (strpos($tokenHeader, 'Bearer') === 0) {
232+
return trim(substr($tokenHeader, 6));
233+
}
234+
235+
return $tokenHeader;
236+
}
237+
217238
/**
218239
* Logs the given user in by saving them to the class.
219240
*/

src/Filters/JWTAuth.php

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use CodeIgniter\HTTP\Response;
2020
use CodeIgniter\HTTP\ResponseInterface;
2121
use CodeIgniter\Shield\Authentication\Authenticators\JWT;
22-
use CodeIgniter\Shield\Config\AuthJWT;
2322
use Config\Services;
2423

2524
/**
@@ -45,7 +44,7 @@ public function before(RequestInterface $request, $arguments = null)
4544
/** @var JWT $authenticator */
4645
$authenticator = auth('jwt')->getAuthenticator();
4746

48-
$token = $this->getTokenFromHeader($request);
47+
$token = $authenticator->getTokenFromRequest($request);
4948

5049
$result = $authenticator->attempt(['token' => $token]);
5150

@@ -62,24 +61,6 @@ public function before(RequestInterface $request, $arguments = null)
6261
}
6362
}
6463

65-
private function getTokenFromHeader(RequestInterface $request): string
66-
{
67-
assert($request instanceof IncomingRequest);
68-
69-
/** @var AuthJWT $config */
70-
$config = config('AuthJWT');
71-
72-
$tokenHeader = $request->getHeaderLine(
73-
$config->authenticatorHeader ?? 'Authorization'
74-
);
75-
76-
if (strpos($tokenHeader, 'Bearer') === 0) {
77-
return trim(substr($tokenHeader, 6));
78-
}
79-
80-
return $tokenHeader;
81-
}
82-
8364
/**
8465
* We don't have anything to do here.
8566
*

tests/Authentication/Authenticators/JWTAuthenticatorTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,4 +282,16 @@ private function generateJWT(?Time $clock = null): string
282282

283283
return $generator->generateToken($this->user);
284284
}
285+
286+
public function testGetTokenFromRequest(): void
287+
{
288+
$request = Services::incomingrequest(null, false);
289+
290+
$jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
291+
$request->setHeader('Authorization', 'Bearer ' . $jwt);
292+
293+
$token = $this->auth->getTokenFromRequest($request);
294+
295+
$this->assertSame($jwt, $token);
296+
}
285297
}

0 commit comments

Comments
 (0)