> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Passwordless sign-in for a Node.js, Python or Java web app

> Recipe: passwordless sign-in for a web app — your own Veriqa server, a channel, the quickstart for your language, the claims, and the pre-production checklist.

You have a web app in Node.js, Python or Java, and you want users to sign in with a QR code and a
confirmation in a messenger, without a password. A new user signs up with the same action.

## What you need

* a machine for the Veriqa server, with or without Docker, on Linux or Windows;
* a bot for at least one channel, such as Telegram, or a mailbox for the Email channel;
* access to the app's code: it gets a standard OpenID Connect client.

## Steps

<Steps>
  <Step title="Deploy the Veriqa server">
    In Docker, follow the [self-hosted quickstart](/docs/quickstart/self-hosted); without Docker,
    [install it as an OS service](/docs/quickstart/os-service).
  </Step>

  <Step title="Enable a channel">
    Set up the bot and enable the channel as described in [Channel setup](/docs/guides/channels).
  </Step>

  <Step title="Declare the client">
    Add the app and its `redirect_uri` to `Veriqa:OpenIddict:Clients` —
    [step 4 of the self-hosted quickstart](/docs/quickstart/self-hosted#4-declare-your-client).
  </Step>

  <Step title="Connect the app">
    Follow the quickstart for your language: [Node.js](/docs/quickstart/node),
    [Python](/docs/quickstart/python) or [Java](/docs/quickstart/java).
  </Step>

  <Step title="Decide which data you need">
    What arrives in the `id_token`, and why not every channel provides an email, is covered in
    [What arrives in the claims](/docs/scenarios/passwordless-login#what-arrives-in-the-claims).
  </Step>

  <Step title="Prepare for production">
    Go through the checklist in [Preparing for production](/docs/guides/hardening).
  </Step>
</Steps>

## How to check

Check the server with [step 8 of the self-hosted quickstart](/docs/quickstart/self-hosted#8-verify).
Then start a sign-in in your app, scan the QR code with your phone and confirm the sign-in in the
messenger: the app should receive the user's `sub`. Each quickstart ends with a detailed checkpoint.

## Next steps

* [Getting the phone number and email](/docs/concepts/phone-and-email) — if the app needs contacts;
* [Second factor and step-up](/docs/scenarios/step-up) — a confirmation before a sensitive operation;
* [Sign-in surfaces](/docs/scenarios/surfaces) — sign-in on a phone, a TV and a kiosk.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.