Skip to content

Commit 609645b

Browse files
jahoomaclaude
andcommitted
Soften fingerprint conflict to log-only, never block login
With the new hardware-based fingerprint, legit users on shared dev machines, Docker images with baked-in /etc/machine-id, CI runners, and corporate golden images can all produce the same fingerprint. Hard-blocking in that case would lock out coworkers behind whichever user logged in first. Keep the "Fingerprint ownership conflict" warn log as input for async abuse review, but always proceed to createCliSession so the signal never gates login on its own. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 6797bac commit 609645b

2 files changed

Lines changed: 6 additions & 19 deletions

File tree

freebuff/web/src/app/onboard/page.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ const Onboard = async ({ searchParams }: PageProps) => {
130130
)
131131
}
132132

133+
// Log fingerprint collisions as a signal for async abuse review, but don't
134+
// block login — shared dev machines, Docker images with baked-in machine-ids,
135+
// and CI runners can legitimately produce the same fingerprint across users.
133136
const { hasConflict, existingUserId } = await checkFingerprintConflict(
134137
fingerprintId,
135138
user.id,
@@ -139,13 +142,6 @@ const Onboard = async ({ searchParams }: PageProps) => {
139142
{ fingerprintId, existingUserId, attemptedUserId: user.id },
140143
'Fingerprint ownership conflict',
141144
)
142-
return (
143-
<StatusCard
144-
title="Unable to complete login"
145-
description="Something went wrong during the login process."
146-
message={`Please try generating a new login code. If the problem persists, contact ${env.NEXT_PUBLIC_SUPPORT_EMAIL} for assistance.`}
147-
/>
148-
)
149145
}
150146

151147
const sessionToken = await getSessionTokenFromCookies()

web/src/app/onboard/page.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ const Onboard = async ({ searchParams }: PageProps) => {
9494
)
9595
}
9696

97+
// Log fingerprint collisions as a signal for async abuse review, but don't
98+
// block login — shared dev machines, Docker images with baked-in machine-ids,
99+
// and CI runners can legitimately produce the same fingerprint across users.
97100
const { hasConflict, existingUserId } = await checkFingerprintConflict(
98101
fingerprintId,
99102
user.id,
@@ -103,18 +106,6 @@ const Onboard = async ({ searchParams }: PageProps) => {
103106
{ fingerprintId, existingUserId, attemptedUserId: user.id },
104107
'Fingerprint ownership conflict',
105108
)
106-
return (
107-
<CardWithBeams
108-
title="Unable to complete login"
109-
description="Something went wrong during the login process."
110-
content={
111-
<p>
112-
Please try generating a new login code. If the problem persists,
113-
contact {env.NEXT_PUBLIC_SUPPORT_EMAIL} for assistance.
114-
</p>
115-
}
116-
/>
117-
)
118109
}
119110

120111
const sessionToken = await getSessionTokenFromCookies()

0 commit comments

Comments
 (0)