First access flow: signup without email, then setup email + password later, best practice?

Hi everyone,

I’m building an app for a membership-based association. Members have a physical card but most don’t have an email registered with us. I need help finding the cleanest way to handle account activation.

The flow I need

  1. Member opens app → “First access” page → enters card number + first name + last name (NO email, NO password)
  2. System verifies against a pre-loaded data type (AnagraficaSocio, separate from User)
  3. If valid → creates User account, then redirects to a “Setup credentials” page
  4. On setup page: user enters real email + chosen password
  5. From then on: login normally with email + password (or with card number + password)

My current approach

Since “Sign the user up” requires an email, I’m:

  • Generating a fake email at signup: card-{number}-{random}@myapp.local
  • Generating a random password (user never sees it)
  • Storing a custom setup_token (64-char random) + expiry (1 hour) on the User
  • Redirecting to /setup-credenziali?token=xxx
  • On that page, I need to swap fake email → real email, and random password → user’s password

Where I’m stuck

For the credential swap, I’m planning this backend workflow sequence:

  1. Verify token (search User by setup_token + expiry not passed)
  2. “Assign a temp password to a user” on the target User
  3. “Log the user in” with fake email + temp password
  4. “Update email” with real email
  5. Return temp password to frontend
  6. Frontend then runs “Update user credentials” workflow with old=temp, new=user-chosen

Question 1: Is this the recommended way, or is there a cleaner pattern?

Question 2: I noticed Bubble docs mention “Send magic login link” can generate links server-side WITHOUT sending email. Could this replace my custom token logic? Has anyone used it this way?

Question 3: For dual login (email OR card number + password), I’m searching User by card number with a privacy rule that allows logged-out users to view only email and numero_tessera. Is this safe enough, or are there better patterns?

Thanks for any tips! I’ve read multiple older threads on similar topics but most are from 2018-2021 and approaches may have changed.

Not sure if I am understanding this correctly, but this is what I would probably recommend.

  1. User puts in member id, first and last name
  2. Backend flow runs to check if that # is in your database and that no user is made
  3. An account is made and they are logged into the dummy email account.

Now here are the important steps

  1. when the account is made set a temporary password for that user. What that will tell bubble is no password is set. You can then on the settings page set a page that users who do not have a password set will navigate to.

  2. on this page design it like your 2nd step

Email
Password
Confirm Password

  1. That flow when they confirm password should Set their account to a new temp password and use that for the update credential flows to change their email and their password.

  2. Navigate them back