Skip to content

Commit 4af3793

Browse files
committed
feat: update generateLoginToken method to accept expiration time
1 parent d968636 commit 4af3793

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

contexts/Authorization/Domain/Repositories/UserRepository.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Contexts\Authorization\Domain\Repositories;
66

7+
use Carbon\CarbonImmutable;
78
use Contexts\Authorization\Domain\UserIdentity\Models\UserId;
89
use Contexts\Authorization\Domain\UserIdentity\Models\UserIdentity;
910
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
@@ -26,7 +27,7 @@ public function existsByEmail(string $email): bool;
2627

2728
public function getByEmailOrThrowAuthFailure(string $email): UserIdentity;
2829

29-
public function generateLoginToken(UserIdentity $user): string;
30+
public function generateLoginToken(UserIdentity $user, CarbonImmutable $expiresAt): string;
3031

3132
public function getCurrentUser(): UserIdentity;
3233
}

contexts/Authorization/Infrastructure/Persistence/UserPersistence.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Contexts\Authorization\Infrastructure\Persistence;
66

7+
use Carbon\CarbonImmutable;
78
use Contexts\Authorization\Domain\Repositories\UserRepository;
89
use Contexts\Authorization\Domain\UserIdentity\Exceptions\AuthenticationFailureException;
910
use Contexts\Authorization\Domain\UserIdentity\Exceptions\UserNotFoundException;
@@ -116,7 +117,7 @@ public function getByEmailOrThrowAuthFailure(string $email): UserIdentity
116117
return $record->toDomain();
117118
}
118119

119-
public function generateLoginToken(UserIdentity $user): string
120+
public function generateLoginToken(UserIdentity $user, CarbonImmutable $expiresAt): string
120121
{
121122
try {
122123
$record = UserRecord::findOrFail($user->getId()->getValue());
@@ -126,7 +127,7 @@ public function generateLoginToken(UserIdentity $user): string
126127
->logContext(['user_id' => $user->getId()->getValue()]);
127128
}
128129

129-
return $record->createToken('login', ['*'], now()->addDay())->plainTextToken;
130+
return $record->createToken('login', ['*'], $expiresAt)->plainTextToken;
130131
}
131132

132133
public function getCurrentUser(): UserIdentity

contexts/Authorization/Tests/Feature/Infrastructure/Persistence/UserPersistenceTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,9 +486,10 @@
486486
$createdUser = $this->userFactory->create(UserId::null(), $email, $password, 'Token User');
487487
$userPersistence = new UserPersistence;
488488
$savedUser = $userPersistence->create($createdUser);
489+
$expiresAt = CarbonImmutable::now()->startOfSecond()->addDay();
489490

490491
// Generate a login token for the user
491-
$token = $userPersistence->generateLoginToken($savedUser);
492+
$token = $userPersistence->generateLoginToken($savedUser, $expiresAt);
492493

493494
// Assert the token is a non-empty string
494495
expect($token)->toBeString();
@@ -501,16 +502,18 @@
501502
expect($result->tokenable_type)->toBe(UserRecord::class);
502503
expect($result->name)->toBe('login');
503504
expect($result->abilities)->toContain('*');
505+
expect($result->expires_at)->toEqual($expiresAt);
504506
});
505507

506508
it('throws an exception when generating a token for a non-existent user', function () {
507509
$userPersistence = new UserPersistence;
508510
$email = new Email('nonexistent-token@example.com');
509511
$password = Password::createFromPlainText('password123');
510512
$nonExistentUser = $this->userFactory->create(UserId::fromInt(999), $email, $password, 'NonExistent User');
513+
$expiresAt = CarbonImmutable::now()->addDay();
511514

512515
// Attempt to generate a token for a non-existent user
513-
$userPersistence->generateLoginToken($nonExistentUser);
516+
$userPersistence->generateLoginToken($nonExistentUser, $expiresAt);
514517
})->throws(AuthenticationFailureException::class);
515518

516519
it('can get the current authenticated user', function () {

0 commit comments

Comments
 (0)