fix(2FA): backup code double-use race condition
This commit is contained in:
1 parent
b4bb9cc727
commit
3e165a8c6f
1 file changed
+12
-2
@@ -81,10 +81,20 @@ export async function POST(request: Request) {
|
||||
});
|
||||
}
|
||||
|
||||
await prisma.client.twoFactorBackupCode.update({
|
||||
where: { id: unusedCodes[matchIndex].id },
|
||||
const consumed = await prisma.client.twoFactorBackupCode.updateMany({
|
||||
where: { id: unusedCodes[matchIndex].id, used: false },
|
||||
data: { used: true },
|
||||
});
|
||||
|
||||
if (consumed.count === 0) {
|
||||
const { lockedUntil } = await recordFailedAttempt(userId);
|
||||
return badRequest({
|
||||
code: 'two-factor-error-invalid-backup-code',
|
||||
message: 'Invalid backup code',
|
||||
...(lockedUntil && { lockedUntil }),
|
||||
});
|
||||
}
|
||||
|
||||
await resetRateLimit(userId);
|
||||
} else {
|
||||
const { token } = body;
|
||||
|
||||
Reference in new issue
Block a user