mirror of
https://github.com/element-hq/matrix-authentication-service.git
synced 2026-10-15 09:01:45 +00:00
The server-rendered registration form is replaced by a React island mounted on `/register`, which renders the CAPTCHA in-page, gives live password complexity feedback, and lays out the upstream provider buttons and the sign-in link the way `/login` does. The island owns the whole form, so every variant of the page is rendered from the mount data alone, and the user fills it in one step. Server-side validation errors are threaded back into it through the mount node, so a rejected submission re-renders with the errors attached to the fields they belong to, until the user edits them. `RegisterContext` resolves the provider names and the sign-in link server-side so that the island only has to render them. The sign-in link is derived from the post-auth action in the query string instead of the `PostAuthContext` loaded from the database, which drops a round trip from both the GET and the invalid-form re-render. Registering now requires JavaScript, including on the variant with upstream providers only and on the one without a CAPTCHA: the <noscript> block shows a notice instead of a duplicate form, which could not work anyway when a CAPTCHA is configured. While the script loads, the page shows a skeleton of the form to avoid layout shifts, and a hidden error notice is revealed if it fails to boot. The server-rendered CAPTCHA component and its entrypoint are removed with their only consumer.