Skip to content

Commit 5cb18c2

Browse files
chore: verifyRecoveryCode - Persist the used_at write immediately
So a consumed recovery code cannot be reused on a subsequent request.
1 parent 2c99a62 commit 5cb18c2

2 files changed

Lines changed: 2 additions & 0 deletions

File tree

app/Strategies/MFA/AbstractMFAChallengeStrategy.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public function verifyRecoveryCode(User $user, string $code): void
5151
foreach ($this->recovery_code_repository->getUnusedByUser($user) as $recoveryCode) {
5252
if (Hash::check($code, $recoveryCode->getCodeHash())) {
5353
$recoveryCode->markUsed();
54+
$this->recovery_code_repository->add($recoveryCode, true);
5455
return;
5556
}
5657
}

tests/Unit/MFA/AbstractMFAChallengeStrategyTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public function testVerifyRecoveryCode_withMatchingCode_marksAsUsed(): void
9090

9191
$repo = \Mockery::mock(IUserRecoveryCodeRepository::class);
9292
$repo->shouldReceive('getUnusedByUser')->with($user)->andReturn([$recoveryCode]);
93+
$repo->shouldReceive('add')->with($recoveryCode, true)->once();
9394

9495
$strategy = new class($repo) extends AbstractMFAChallengeStrategy {
9596
public function issueChallenge(User $user, ?Client $client, bool $remember): array { return []; }

0 commit comments

Comments
 (0)