`<SignIn />` and `<SignUp />` email and name fields have no `autocomplete`, so browsers don't offer the user's email
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 72/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- next.js, react, typescript
- Domaine
- accessibility, authentication, frontend
Piste de recherche
Start with packages/ui/src/components/SignIn/SignInStart.tsx at the identifier field mentioned in the issue, then locate the corresponding SignUp fields and their tests. Check how identifier types and passkey autofill are handled, and run the relevant component tests. Done when the fields receive the standard autocomplete tokens described in the issue, including a valid field name before webauthn.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Reproduction
No special setup needed: any app with the default <SignIn /> / <SignUp /> and email (email code) as the only identifier shows it, e.g. a fresh Next.js quickstart.
Description
With email as the sign-in identifier, the prebuilt components render the email and name fields without any autocomplete attribute:
<!-- <SignIn /> -->
<input id="identifier-field" name="identifier" type="text" inputmode="email" ...>
<!-- <SignUp /> -->
<input id="firstName-field" name="firstName" type="text" ...>
<input id="lastName-field" name="lastName" type="text" ...>
<input id="emailAddress-field" name="emailAddress" type="text" inputmode="email" ...>
So Safari (macOS/iOS/iPadOS), the iOS QuickType keyboard and password managers can't tell the field is an email field, and they don't offer the user's email. This is worst with passwordless sign-in (email code): there's no password field, so the browser never saves a login. Users type their full email by hand on every sign-in. We see it in session recordings: the same users typing their email letter by letter every week, and users have reported it.
type="text", name="identifier" and a translated label (here French, "Adresse e-mail") leave the browser almost nothing to guess from.
In the source, the identifier field only gets autocomplete when passkey autofill is on, and then the value is webauthn on its own:
autoComplete={isWebAuthnAutofillSupported ? 'webauthn' : undefined}
There's no prop or appearance option to set it, so the only workaround is adding the attribute to Clerk's DOM from outside with a MutationObserver.
Steps to reproduce:
- Enable email (email code) as the only identifier in the dashboard.
- Render
<SignIn />(or<SignUp />). - Inspect the email field, or focus it in Safari on iOS/iPadOS.
Expected behavior:
The fields carry standard autocomplete tokens, so browsers, keyboards and password managers can offer the user's details:
- Sign-in identifier:
emailwhen email is the only identifier,telfor phone only,usernamefor username or mixed identifiers. With passkey autofill, addwebauthnafter the field name (username webauthn,email webauthn). A barewebauthnisn't a valid value per the HTML spec, which expects it after a field name. - Sign-up:
emailonemailAddress,given-nameonfirstName,family-nameonlastName,telonphoneNumber,usernameonusername.
This is also an accessibility issue: WCAG 2.1 SC 1.3.5 Identify Input Purpose (Level AA) asks for autocomplete on fields that collect the user's own information.
Actual behavior:
No autocomplete attribute on these fields (unless passkeys are on, then a bare webauthn). Safari and the iOS keyboard don't suggest the user's email.
Environment
@clerk/nextjs: 7.5.2
@clerk/clerk-js: 6 (loaded from Frontend API)
@clerk/ui: 1.40.0 (loaded from Frontend API)
next: 16.3.1
react: 19
Seen in: Safari on iPadOS (user report); confirmed in Chromium and WebKit (Playwright)
- Langage dominant
- TypeScript
- Étoiles
- 1.8k
- Forks
- 480
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 285
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de clerk/javascript
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
clerk/javascript#10026 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
@clerk/nextjs: onBeforeSetActive never settles when invalidateCacheAction rejects (e.g. after a redeploy), so setActive and signOut hang foreverPeut-être pris @RaphaelFakhri l’a pris il y a 14 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
clerk/javascript#9987 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
clerk/javascript#10231 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
clerk/javascript#10185 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 1-2 jours Accessibilité débutants 45/100
clerk/javascript#10118 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de clerk/javascript
Issues similaires
-
area:editor bug issue-form:bug P0 platform:windows review: low
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
1lck/Lithe-IDEA#1388 ·
Les mainteneurs répondent en général sous 1 jour
-
fix(api): isToolAuditEnabled swallows database read errors on auditToolOperations without loggingOuvertearea: backend bug priority: low
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
snapotter-hq/SnapOtter#3238 ·
Les mainteneurs répondent en général sous 1 jour
-
rig up --plan times out after 5 s and reports an UNKNOWN outcome while the daemon completes the planOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
filesystem: search_files does not expand non-wildcard excludePatterns like directory_tree doesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelcontextprotocol/servers#5216 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour