Email confirmation links failing? #50775
Replies: 1 comment
|
Your elimination list is thorough, and the one thing it does not cover is the flow prefix. In GoTrue, a signup confirmation started under the PKCE flow is stored as Your token is 56 hex characters, so it is the bare hash. If the row is prefixed, it can never match. Two checks settle it:
If it is prefixed, any of these resolves it: pass the full Two smaller things while you are in there: |
Uh oh!
There was an error while loading. Please reload this page.
Email confirmation links (/auth/v1/verify with token_hash + type=signup) consistently fail with "Email link is invalid or has expired" (403), on 100% of attempts, including:
A fresh link clicked ~4 minutes after /resend, well within the 86400-second OTP expiry configured on the project
Confirmed via auth.users.confirmation_sent_at that the resend genuinely rotates the token server-side each time
No custom Auth Hooks configured
Client is calling supabase.auth.verifyOtp({ token_hash, type: 'signup' }) directly via supabase-js v2, confirmed pointed at the correct project (qqivaoanrobyxvrvlyka)
Email template correctly uses {{ .TokenHash }} unmodified in the link (no encoding issues — token contains only hex characters, 56 chars, matches expected SHA-224 hash length)
Auth logs show every /verify attempt for this identity returning WARNING/403, with no successful attempt ever recorded — ruling out a race condition or scanner consuming it first
Project ref: qqivaoanrobyxvrvlyka
Affected user: braden@highdesertdigitaldesign.com
All reactions