Skip to content

feat(ui): Support signUpIfMissing with Clerk <SignIn> component#7928

Open
dmoerner wants to merge 16 commits into
mainfrom
daniel/user-4769-sign-up-if-missing-clerk-components
Open

feat(ui): Support signUpIfMissing with Clerk <SignIn> component#7928
dmoerner wants to merge 16 commits into
mainfrom
daniel/user-4769-sign-up-if-missing-clerk-components

Conversation

@dmoerner

@dmoerner dmoerner commented Feb 25, 2026

Copy link
Copy Markdown
Contributor

Description

The <SignIn> component can already be used in a sign-in-or-sign-up flow (CombinedFlow) under certain conditions. When strict enumeration protection is enabled, make that combined flow pass the signUpIfMissing parameter to the backend to allow an enumeration-safe combined flow. Previously, attempting to use a combined flow with strict enumeration protection enabled was silently broken.

Under the hood, the backend treats sign up if missing as an account transfer. We therefore add support for this account transfer logic when handling first factor verification in the combined sign in flow when strict enumeration protection is enabled.

Fixes USER-4769.

We should merge this in coordination with documentation and a Changelog release, since it will change existing behavior (although with a fix for something that is currently broken)

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • New Features
    • Added user settings support for attack protection, including enumeration protection.
    • Enhanced email-link and first-factor flows to recognize “transferable” results and route to the appropriate transfer/sign-up experience.
    • Added new UI messaging keys for the “verified transferable” state.
  • Bug Fixes
    • Email-link verification polling and completion now treat “transferable” as a non-error terminal state.
    • Sign-in/sign-up transfer behavior is now gated by combined flow + enumeration protection as intended.
  • Tests
    • Added coverage for transferable scenarios and signUpIfMissing transfer behavior.

The `<SignIn>` component can already be used in a sign-in-or-sign-up flow
(`CombinedFlow`) under certain conditions. When strict enumeration
protection is enabled, make that combined flow pass the
`signUpIfMissing` parameter to the backend to allow an enumeration-safe
combined flow. Previously, attempting to use a combined flow with strict
enumeration protection enabled was silently broken.

Under the hood, the backend treats sign up if missing as an account
transfer. We therefore add support for this account transfer logic when
handling first factor verification in the combined sign in flow when
strict enumeration protection is enabled.
@changeset-bot

changeset-bot Bot commented Feb 25, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 77325fd

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 23 packages
Name Type
@clerk/clerk-js Minor
@clerk/shared Minor
@clerk/ui Minor
@clerk/localizations Minor
@clerk/chrome-extension Patch
@clerk/electron Patch
@clerk/expo Patch
@clerk/astro Patch
@clerk/backend Patch
@clerk/expo-passkeys Patch
@clerk/express Patch
@clerk/fastify Patch
@clerk/headless Patch
@clerk/hono Patch
@clerk/msw Patch
@clerk/nextjs Patch
@clerk/nuxt Patch
@clerk/react-router Patch
@clerk/react Patch
@clerk/tanstack-react-start Patch
@clerk/testing Patch
@clerk/vue Patch
@clerk/swingset Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Feb 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Jul 10, 2026 1:19am
swingset Ready Ready Preview, Comment Jul 10, 2026 1:19am

Request Review

@github-actions github-actions Bot added the ui label Mar 2, 2026
@dmoerner dmoerner marked this pull request as ready for review March 2, 2026 21:23
@dmoerner dmoerner requested a review from wobsoriano March 2, 2026 21:23
@coderabbitai

coderabbitai Bot commented Mar 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Repository UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 0010dbb9-fa98-45ea-a563-d8879c107c4f

📥 Commits

Reviewing files that changed from the base of the PR and between 625bdc2 and 77325fd.

📒 Files selected for processing (56)
  • .changeset/fancy-candies-slide.md
  • packages/localizations/src/ar-SA.ts
  • packages/localizations/src/be-BY.ts
  • packages/localizations/src/bg-BG.ts
  • packages/localizations/src/bn-IN.ts
  • packages/localizations/src/ca-ES.ts
  • packages/localizations/src/cs-CZ.ts
  • packages/localizations/src/da-DK.ts
  • packages/localizations/src/de-DE.ts
  • packages/localizations/src/el-GR.ts
  • packages/localizations/src/en-GB.ts
  • packages/localizations/src/en-US.ts
  • packages/localizations/src/es-CR.ts
  • packages/localizations/src/es-ES.ts
  • packages/localizations/src/es-MX.ts
  • packages/localizations/src/es-UY.ts
  • packages/localizations/src/fa-IR.ts
  • packages/localizations/src/fi-FI.ts
  • packages/localizations/src/fr-FR.ts
  • packages/localizations/src/he-IL.ts
  • packages/localizations/src/hi-IN.ts
  • packages/localizations/src/hr-HR.ts
  • packages/localizations/src/hu-HU.ts
  • packages/localizations/src/id-ID.ts
  • packages/localizations/src/is-IS.ts
  • packages/localizations/src/it-IT.ts
  • packages/localizations/src/ja-JP.ts
  • packages/localizations/src/kk-KZ.ts
  • packages/localizations/src/ko-KR.ts
  • packages/localizations/src/mn-MN.ts
  • packages/localizations/src/ms-MY.ts
  • packages/localizations/src/nb-NO.ts
  • packages/localizations/src/nl-BE.ts
  • packages/localizations/src/nl-NL.ts
  • packages/localizations/src/pl-PL.ts
  • packages/localizations/src/pt-BR.ts
  • packages/localizations/src/pt-PT.ts
  • packages/localizations/src/ro-RO.ts
  • packages/localizations/src/ru-RU.ts
  • packages/localizations/src/sk-SK.ts
  • packages/localizations/src/sr-RS.ts
  • packages/localizations/src/sv-SE.ts
  • packages/localizations/src/ta-IN.ts
  • packages/localizations/src/te-IN.ts
  • packages/localizations/src/th-TH.ts
  • packages/localizations/src/tr-TR.ts
  • packages/localizations/src/uk-UA.ts
  • packages/localizations/src/vi-VN.ts
  • packages/localizations/src/zh-CN.ts
  • packages/localizations/src/zh-TW.ts
  • packages/shared/src/internal/clerk-js/queryParams.ts
  • packages/shared/src/types/localization.ts
  • packages/ui/src/common/EmailLinkCompleteFlowCard.tsx
  • packages/ui/src/common/EmailLinkStatusCard.tsx
  • packages/ui/src/common/EmailLinkVerify.tsx
  • packages/ui/src/components/SignIn/__tests__/SignInEmailLinkFlowComplete.test.tsx
✅ Files skipped from review due to trivial changes (21)
  • packages/localizations/src/nl-BE.ts
  • packages/localizations/src/ja-JP.ts
  • packages/localizations/src/it-IT.ts
  • packages/localizations/src/es-ES.ts
  • packages/localizations/src/es-CR.ts
  • packages/localizations/src/is-IS.ts
  • packages/localizations/src/pt-PT.ts
  • packages/localizations/src/th-TH.ts
  • packages/localizations/src/kk-KZ.ts
  • packages/localizations/src/ca-ES.ts
  • packages/localizations/src/ar-SA.ts
  • packages/localizations/src/vi-VN.ts
  • packages/localizations/src/zh-TW.ts
  • packages/localizations/src/id-ID.ts
  • packages/localizations/src/de-DE.ts
  • packages/localizations/src/sk-SK.ts
  • packages/localizations/src/hu-HU.ts
  • packages/localizations/src/ru-RU.ts
  • packages/localizations/src/nb-NO.ts
  • packages/localizations/src/mn-MN.ts
  • packages/localizations/src/ta-IN.ts

📝 Walkthrough

Walkthrough

Adds support for a combined sign-in-or-sign-up flow gated by enumeration protection. Introduces attack-protection settings, transferable verification handling, sign-up transfer orchestration, conditional sign-in creation, localization updates, fixtures, tests, and release metadata.

Changes

Enumeration Protection & Transfer Flow

Layer / File(s) Summary
Attack protection data shape
packages/shared/src/types/userSettings.ts, packages/clerk-js/src/core/resources/UserSettings.ts
Adds AttackProtectionData, exposes attackProtection/attack_protection, and wires the value through deserialization and snapshots.
Transferable verification handling
packages/clerk-js/src/core/clerk.ts, packages/clerk-js/src/core/resources/SignIn.ts, packages/clerk-js/src/core/resources/__tests__/SignIn.test.ts
Treats transferable as a non-error verification result, stops polling on that status, and tests the polling transition.
Sign-up transfer helper and UI wiring
packages/ui/src/components/SignIn/handleSignUpIfMissingTransfer.ts, packages/ui/src/components/SignIn/SignInFactorOneCodeForm.tsx, packages/ui/src/components/SignIn/SignInFactorOneEmailLinkCard.tsx, packages/ui/src/components/SignIn/__tests__/handleSignUpIfMissingTransfer.test.ts, packages/ui/src/components/SignIn/__tests__/SignInFactorOneTransfer.test.tsx
Creates sign-up transfers, activates complete sessions or navigates for missing requirements, and routes eligible combined-flow failures into the helper.
Conditional sign-up creation
packages/ui/src/components/SignIn/SignInStart.tsx, packages/ui/src/components/SignIn/__tests__/SignInStart.test.tsx
Adds signUpIfMissing: true when combined flow and enumeration protection are enabled without password sign-in.
Email-link transferable state
packages/ui/src/common/EmailLinkVerify.tsx, packages/ui/src/common/EmailLinkStatusCard.tsx, packages/ui/src/common/EmailLinkCompleteFlowCard.tsx, packages/ui/src/components/SignIn/__tests__/SignInEmailLinkFlowComplete.test.tsx
Handles transferable query status without completing sign-up, maps its visual state, supplies localization keys, and tests the resulting UI.
Fixtures and localization
packages/ui/src/test/fixture-helpers.ts, packages/ui/src/test/fixtures.ts, packages/shared/src/types/localization.ts, packages/localizations/src/*.ts
Adds enumeration-protection fixtures and verifiedTransferable localization data across locale resources.
Changeset entry
.changeset/fancy-candies-slide.md
Documents minor version bumps and the combined sign-in-or-sign-up feature.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant SignInUI as SignIn UI
  participant Clerk as Clerk Client
  participant Backend

  User->>SignInUI: Submit identifier
  SignInUI->>Backend: signIn.create({ signUpIfMissing: true })
  Backend-->>SignInUI: transferable verification status
  SignInUI->>Backend: signUp.create({ transfer: true, unsafeMetadata })
  Backend-->>SignInUI: complete or missing_requirements
  alt complete
    SignInUI->>Clerk: setActive(session)
    Clerk-->>User: Navigate to after-sign-up URL
  else missing_requirements
    SignInUI-->>User: Navigate to ../create/continue
  end
Loading

Possibly related PRs

  • clerk/javascript#8329: Both changes modify sign-in verification routing for server-provided statuses in shared UI paths.

Suggested reviewers: wobsoriano, jacekradko, zourzouvillys

Poem

A bunny hops through tabs tonight,
With transfer paths arranged just right.
Sign in, sign up, the flow can glide,
While verified links point back inside.
Localization carrots bloom—
Tests thump softly through the room. 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly reflects the main change: enabling signUpIfMissing in the Clerk flow.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/clerk-js/src/core/resources/SignIn.ts`:
- Around line 311-312: SignInFuture.waitForEmailLinkVerification currently
treats only 'verified' and 'expired' as terminal statuses, which causes
transferable flows started by createEmailLinkFlow to poll indefinitely; update
the status check inside SignInFuture.waitForEmailLinkVerification to include
'transferable' alongside 'verified' and 'expired' so the polling loop calls
stop()/resolves when status === 'transferable', ensuring transferable email-link
flows terminate properly.

ℹ️ Review info

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between cd1973e and 721b518.

📒 Files selected for processing (15)
  • .changeset/fancy-candies-slide.md
  • packages/clerk-js/src/core/clerk.ts
  • packages/clerk-js/src/core/resources/SignIn.ts
  • packages/clerk-js/src/core/resources/UserSettings.ts
  • packages/shared/src/errors/emailLinkError.ts
  • packages/shared/src/types/userSettings.ts
  • packages/ui/src/components/SignIn/SignInFactorOneCodeForm.tsx
  • packages/ui/src/components/SignIn/SignInFactorOneEmailLinkCard.tsx
  • packages/ui/src/components/SignIn/SignInStart.tsx
  • packages/ui/src/components/SignIn/__tests__/SignInFactorOneTransfer.test.tsx
  • packages/ui/src/components/SignIn/__tests__/SignInStart.test.tsx
  • packages/ui/src/components/SignIn/__tests__/handleSignUpIfMissingTransfer.test.ts
  • packages/ui/src/components/SignIn/handleSignUpIfMissingTransfer.ts
  • packages/ui/src/test/fixture-helpers.ts
  • packages/ui/src/test/fixtures.ts

Comment thread packages/clerk-js/src/core/resources/SignIn.ts Outdated
This is connected to custom flows and was missed in the previous PRs
supporting custom flows. Let's add it now while we are here.
const res = await this.#resource.__internal_baseGet();
const status = res.firstFactorVerification.status;
if (status === 'verified' || status === 'expired') {
if (status === 'verified' || status === 'expired' || status === 'transferable') {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is not necessary for Clerk builtin components but was missed in #7749. As suggested by CodeRabbit, let's just fix it now.

@pkg-pr-new

pkg-pr-new Bot commented Mar 2, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7928

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7928

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7928

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7928

@clerk/electron

npm i https://pkg.pr.new/@clerk/electron@7928

@clerk/electron-passkeys

npm i https://pkg.pr.new/@clerk/electron-passkeys@7928

@clerk/eslint-plugin

npm i https://pkg.pr.new/@clerk/eslint-plugin@7928

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@7928

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7928

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7928

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7928

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@7928

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7928

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7928

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7928

@clerk/react

npm i https://pkg.pr.new/@clerk/react@7928

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7928

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7928

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7928

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7928

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@7928

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7928

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7928

commit: 77325fd

@dmoerner dmoerner marked this pull request as draft March 3, 2026 04:25
@dmoerner

dmoerner commented Mar 3, 2026

Copy link
Copy Markdown
Contributor Author

Depends on re-revert of #7962 with Enterprise SSO captcha transfer fix. That was now fixed.

@dmoerner dmoerner marked this pull request as ready for review March 23, 2026 18:37
@dmoerner

dmoerner commented Mar 23, 2026

Copy link
Copy Markdown
Contributor Author

Working scenarios I tested locally:

  • Password (falls back to normal strict enumeration protection sign in)
  • Restricted mode (falls back to normal strict enumeration protection sign in)
  • Email code sign in and sign up with and without additional requirements
  • Email code sign up with immutable attribute
  • Email link sign in and sign up with and without additional requirements
  • Email code sign in with 2FA enabled
  • Phone code sign in and sign up
  • Email link sign up transfer with require same device and browser.

Scenarios I didn't test locally:

  • Username (should fall back to normal strict enumeration protection sign in): Can you even sign in with a username with the Clerk components when you also have email or phone enabled (since you need those for enumeration protection)?

Under investigation:

  • Some sort of a race condition with email links. The polling tab sometimes does not update.

@github-actions

Copy link
Copy Markdown
Contributor

Hello 👋

We currently close PRs after 60 days of inactivity. It's been 50 days since the last update here. If we missed this PR, please reply here. Otherwise, we'll close this PR in 10 days.

Thanks for being a part of the Clerk community! 🙏

@github-actions github-actions Bot added the Stale label May 30, 2026
@github-actions github-actions Bot closed this Jun 6, 2026
@dmoerner dmoerner reopened this Jul 9, 2026
…mponents

Reconcile the signUpIfMissing extraction with main's protect-check support:
route protect-gated sign-ups to the /protect-check challenge in the shared
navigateToNextStepSignUp helper (used by both the OAuth callback and the
sign-in transfer flow), threading signUpProtectCheckUrl through all call sites.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-07-10T01:21:30.020Z

Summary

Metric Count
Packages analyzed 19
Packages with changes 1
🔴 Breaking changes 0
🟡 Non-breaking changes 2
🟢 Additions 4

🤖 This report was reviewed by claude-sonnet-4-6.


@clerk/shared

Current version: 4.25.1
Recommended bump: MINOR → 4.26.0

Subpath ./internal/clerk-js/navigateToNextStepSignUp

🟢 Additions (1)

Added: ./internal/clerk-js/navigateToNextStepSignUp

New subpath export ./internal/clerk-js/navigateToNextStepSignUp

Subpath ./internal/clerk-js/queryParams

🟡 Non-breaking Changes (1)

Modified: VerifyTokenStatus
- type VerifyTokenStatus = 'verified' | (typeof EmailLinkErrorCodeStatus)[keyof typeof EmailLinkErrorCodeStatus];
+ type VerifyTokenStatus = 'verified' | 'transferable' | (typeof EmailLinkErrorCodeStatus)[keyof typeof EmailLinkErrorCodeStatus];

Static analyzer: Breaking change in type alias VerifyTokenStatus: Type changed: 'verified'|(typeof import("@clerk/shared").~EmailLinkErrorCodeStatus)[keyof typeof import("@clerk/shared").~EmailLinkEr…'transferable'|'verified'|(typeof import("@clerk/shared").~EmailLinkErrorCodeStatus)[keyof typeof import("@clerk/shared…

🤖 AI review (reclassified as non-breaking) (95%): Adding a new string literal 'transferable' to a union type widens the set of values the type accepts; existing code that handles any VerifyTokenStatus value is unaffected, and code that assigns a 'transferable' string to this type now compiles correctly — no previously valid consumer code is broken.

Subpath ./types

🟡 Non-breaking Changes (1)

Modified: __internal_LocalizationResource
// ... 428 unchanged lines elided ...
          titleNewTab: LocalizationValue;
          subtitleNewTab: LocalizationValue;
        };
+       verifiedTransferable: {
+         title: LocalizationValue;
+         subtitle: LocalizationValue;
+       };
        loading: {
          title: LocalizationValue;
          subtitle: LocalizationValue;
// ... 1546 unchanged lines elided ...

Static analyzer: Breaking change in type alias __internal_LocalizationResource: Type changed: {locale:string;maintenanceMode:import("@clerk/shared").LocalizationValue;roles:{[r:string]:import("@clerk/shared").Loca…{locale:string;maintenanceMode:import("@clerk/shared").LocalizationValue;roles:{[r:string]:import("@clerk/shared").Loca…

🤖 AI review (reclassified as non-breaking) (72%): The before and after snippets are structurally identical at the visible boundaries; the only stated difference is 4 additional lines (1900 vs 1904 elided), which most likely represents new optional localization key additions to this output/read type used only as the basis for DeepPartial<DeepLocalizationWithoutObjects<__internal_LocalizationResource>>—new properties on an output type are non-breaking, and the DeepPartial wrapper makes all fields optional for consumers anyway.

🟢 Additions (3)

Added: AttackProtectionData
+ type AttackProtectionData = {
+   enumeration_protection: {
+     enabled: boolean;
+   };
+ };

Added type alias AttackProtectionData

Added: UserSettingsJSON.attack_protection
+ attack_protection?: AttackProtectionData;

Added property UserSettingsJSON.attack_protection

Added: UserSettingsResource.attackProtection
+ attackProtection: AttackProtectionData;

Added property UserSettingsResource.attackProtection


Report generated by Break Check

Last ran on 77325fd.

dmoerner and others added 2 commits July 9, 2026 13:57
- Keep transferred sign-ups inside the combined <SignIn> flow: navigate to
  the nested create/... routes via relative paths and reuse the context's
  navigateOnSetActive instead of absolute signUpUrl-based URLs, which
  forced a full page reload and broke apps without a standalone SignUp
  route (virtual/modal routing included).
- Make UserSettingsJSON.attack_protection optional and deep-normalize it
  in UserSettings.fromJSON so partial payloads can't crash consumers.
- Derive a shared signUpIfMissingEnabled predicate in useSignInContext
  instead of re-deriving eligibility in three components.
- Resolve the OTP card before transferring so it can't be left spinning.
- Drop the redundant missingFields param from navigateToNextStepSignUp.
- Extract the terminal email-link verification status check shared by the
  two SignIn polling loops.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The link-click tab of a signUpIfMissing email-link flow previously showed
'Successfully signed in', but the user is not signed in yet - the email was
verified and the original tab continues the flow as a sign-up. Render a
dedicated 'Email verified' card (new signIn.emailLink.verifiedTransferable
localization keys) driven by the __clerk_status=transferable query param.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant