<SignIn />: the reset password code step renders an empty, focusable back button with no accessible name

Ouverte Adaptée aux débutants
#10,708 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
85/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
react, typescript

Piste de recherche

Lisez packages/ui/src/components/SignIn/SignInFactorOneForgotPasswordCard.tsx et suivez la manière dont ce composant fournit des props à la carte du code de vérification. L’issue indique que backLinkLabel manque et suggère d’utiliser le libellé localisé du bouton de retour ; examinez le code associé dans VerificationCodeCard.tsx et le flux de réinitialisation du mot de passe à la connexion. Le travail est terminé lorsque l’étape du code de réinitialisation dispose d’un nom accessible pour le bouton de retour et que la violation d’accessibilité concernant le nom du bouton est résolue.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Preliminary Checks
Reproduction

https://upward-hare-2386.accounts.dev/sign-in

Publishable key

pk_test_dXB3YXJkLWhhcmUtMjM4Ni5jbGVyay5hY2NvdW50cy5kZXYk

Description

The reproduction is the hosted Account Portal of a brand-new development application, created only for this report and left on Clerk's default settings (email + password). It has no appearance, no localization and no custom CSS. Test user: [email protected].

Steps to reproduce:

  1. Open the sign-in page above and enter [email protected].
  2. On the password step, click Forgot password?
  3. Click Reset your password.
  4. On the Reset password code step, press Tab from Continue, or run axe on the card.

Expected behavior:

A labelled "Back" button, or no button at all.

Actual behavior:

An empty ghost button is rendered below Continue:

<button class="cl-formButtonReset cl-button 🔒️ cl-internal-sbng93" data-variant="ghost" data-color="primary"></button>
  • It is 400×14 px, focusable (tabIndex 0) and the next Tab stop after Continue. When focused, it shows as an empty bar.
  • It has no text and no aria-label. axe 4.11 reports button-name (critical, WCAG 4.1.2).
  • Clicking it works: it goes back to the Forgot Password? screen. So it is a real action that is missing its label, not a leftover element.

Cause (from the source on main):

  • Since #7626, VerificationCodeCard renders a formButtonReset button whenever onBackLinkClicked is passed. Its text comes from the optional backLinkLabel prop that the same PR added.
  • SignInFactorOne passes onBackLinkClicked to SignInFactorOneForgotPasswordCard for both reset_password_phone_code and reset_password_email_code.
  • Neither SignInFactorOneForgotPasswordCard nor SignInFactorOneCodeForm sets backLinkLabel. Before #7626 the card ignored onBackLinkClicked, so nothing was rendered on this step. Since then, the button is rendered empty.
  • Only SmsCodeFlowScreen passes a label today. The open PR #10396 adds backLinkLabel={localizationKeys('backButton')} to UVFactorOneCodeForm for the same reason, but it does not touch the sign-in reset password step.

Possible fix: pass a label, e.g. backLinkLabel={localizationKeys('backButton')}, from SignInFactorOneForgotPasswordCard. As a safeguard, VerificationCodeCard could render the button only when a label is present.

Environment
Hosted Account Portal, development instance with default settings
ClerkJS 6.41.0, @clerk/ui 1.42.0 (window.Clerk.version / window.Clerk.uiVersion)
Chromium 153.0.8010.12 via Playwright 1.63.0, en-US
Same code in @clerk/ui 1.42.4 (latest on npm) and on main (f6d8807c28cf0d31662f3926ae7370cc69e8d554)
Also seen in a Next.js app on @clerk/ui 1.38.0 with the es-ES localization
Langage dominant
TypeScript
Étoiles
1.8k
Forks
492
Merge moyen
1 j 6 h
PR mergées (30 j)
367

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de clerk/javascript

Toutes les issues de clerk/javascript

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.