Verification proves a person owns the address they gave. It protects against typos, fake accounts and someone registering with another person’s email.

In Studio

Users & auth → Sign-in → Sign-in & registration → Registration → Verify email before sign-in. A new account must open the link in its confirmation email first. Also Restrictions → Require a verified email. The message is Confirm your email in Email templates. Without it, people sign in straight after sign-up and the address stays unverified (user.email_verified is false) until they confirm.

The flow

  1. signUp returns verificationRequired: true and no session.
  2. Show “Check your inbox” with a resend button.
  3. The person clicks the link and lands on your redirectTo page.
  4. That page confirms the token and the person is signed in.
verifyEmail confirms the address and returns a session. The redirectTo page must be on your redirect list.

Other ways an address becomes verified

  • Using an email code or sign-in link proves the inbox.
  • A social provider may report the address as verified.
  • An administrator creates the user with emailVerified: true (the default for admin-created accounts).
  • Company sign-in connections have Trust the email address to treat the provider’s email as verified.

Show verification status

Require email_verified for sensitive actions through an access rule, not only the UI.

Changing the email later

When someone changes their address with updateUser({ email }), a link goes to the new address, and the change happens when it’s clicked:
The old address keeps working until the new one is confirmed. The user.email_changed event fires on confirmation, and user.verified when an address is confirmed.

Make landing pages robust

  • Links are single-use and expire. If verifyEmail throws, show “This link has expired” with a button to send a new one.
  • Don’t show or log the token.
  • After success, send the person where they were going.

Redirect URLs

Allow your landing page.

Email templates

Change the wording.