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

# Auth methods

> Authentication methods provided by Dynamic — email, SMS, web3 wallets, social login, passkey — with links to SDK implementation guides.

Dynamic provides built-in authentication methods that handle the entire flow from user-facing UI to JWT issuance. No external auth infrastructure is required — enable the methods you want in the dashboard and the SDK handles the rest.

Each method below links to specific SDK implementation guides for JavaScript, React, React Native, Swift, Kotlin, and Flutter.

## Email

A one-time passcode (OTP) or magic link is sent to the user's email address. The user enters the code (or clicks the link), the SDK verifies it with Dynamic's backend, and a JWT is issued.

<CardGroup cols={3}>
  <Card title="JavaScript" icon="js" href="/javascript/authentication-methods/email" />

  <Card title="React" icon="react" href="/react/authentication-methods/email" />

  <Card title="React Native" icon="react" href="/react-native/authentication-methods/email" />

  <Card title="Swift" icon="swift" href="/swift/authentication" />

  <Card title="Kotlin" icon="android" href="/kotlin/authentication" />

  <Card title="Flutter" icon="flutter" href="/flutter/email-authentication" />
</CardGroup>

## SMS

A one-time passcode is sent to the user's phone number. The user enters the code, the SDK verifies it, and a JWT is issued.

<CardGroup cols={3}>
  <Card title="JavaScript" icon="js" href="/javascript/authentication-methods/sms" />

  <Card title="React" icon="react" href="/react/authentication-methods/sms" />

  <Card title="React Native" icon="react" href="/react-native/authentication-methods/sms" />

  <Card title="Swift" icon="swift" href="/swift/authentication" />

  <Card title="Kotlin" icon="android" href="/kotlin/authentication" />

  <Card title="Flutter" icon="flutter" href="/flutter/sms-authentication" />
</CardGroup>

## Web3 wallets

The user connects an external wallet (MetaMask, Phantom, Coinbase Wallet, etc.) and signs a message to prove ownership. After the signature is verified, Dynamic issues a JWT.

<CardGroup cols={3}>
  <Card title="JavaScript" icon="js" href="/javascript/authentication-methods/external-wallets" />

  <Card title="React" icon="react" href="/react/authentication-methods/external-wallets" />

  <Card title="React Native" icon="react" href="/react-native/authentication-methods/external-wallets" />

  <Card title="Swift" icon="swift" href="/swift/authentication" />

  <Card title="Kotlin" icon="android" href="/kotlin/authentication" />

  <Card title="Flutter" icon="flutter" href="/flutter/authentication" />
</CardGroup>

## Social login

The user authenticates via an OAuth provider (Google, Discord, Apple, GitHub, X/Twitter, etc.). The SDK redirects to the provider, handles the callback, and issues a JWT.

For provider setup and configuration, see [Social Providers](/overview/social-providers/overview).

<CardGroup cols={3}>
  <Card title="JavaScript" icon="js" href="/javascript/authentication-methods/social" />

  <Card title="React" icon="react" href="/react/authentication-methods/social" />

  <Card title="React Native" icon="react" href="/react-native/authentication-methods/social" />

  <Card title="Swift" icon="swift" href="/swift/social-authentication" />

  <Card title="Kotlin" icon="android" href="/kotlin/social-authentication" />

  <Card title="Flutter" icon="flutter" href="/flutter/social-authentication" />
</CardGroup>

## Passkey (sign-in only)

The user authenticates using a passkey via WebAuthn. Passkey sign-in is supported as a primary authentication method. Passkey registration is supported as an [MFA method](/overview/authentication/mfa).

<CardGroup cols={3}>
  <Card title="JavaScript" icon="js" href="/javascript/authentication-methods/passkey" />

  <Card title="React" icon="react" href="/react/authentication-methods/passkey" />

  <Card title="React Native" icon="react" href="/react-native/authentication-methods/passkey" />

  <Card title="Swift" icon="swift" href="/swift/passkey-setup" />

  <Card title="Kotlin" icon="android" href="/kotlin/passkeys" />

  <Card title="Flutter" icon="flutter" href="/flutter/authentication" />
</CardGroup>

## Cookie-based authentication

Instead of returning the JWT for in-app storage (e.g. localStorage), Dynamic can set a secure, HttpOnly cookie containing a minified JWT. The browser (or applicable client) sends the cookie automatically on same-origin requests, reducing XSS risk and enabling cross-subdomain sessions.

For setup steps, verification checklist, and how it works, see [Cookie-based authentication](/overview/authentication/cookie-authentication).

<CardGroup cols={3}>
  <Card title="React" icon="react" href="/react/authentication-methods/cookie-authentication" />

  <Card title="React Native" icon="react" href="/react-native/authentication-methods/cookie-authentication" />

  <Card title="JavaScript" icon="js" href="/javascript/authentication-methods/cookie-authentication" />
</CardGroup>

## What happens after authentication

After a JWT is issued, additional steps may follow depending on your configuration:

* **Information capture**: If you require fields like email, alias, or username, the user is prompted to complete them before being fully logged in. See your SDK's information capture docs.
* **Embedded wallet creation**: If enabled, embedded wallets are created after authentication (not during). The user may be authenticated before the wallet is ready. See [Embedded Wallets](/overview/wallets/embedded-wallets/mpc/overview).
* **MFA**: If required, the user completes multi-factor authentication to upgrade their JWT scope. See [MFA](/overview/authentication/mfa).
* **Access control**: Dynamic evaluates [access lists and gates](/overview/access-control/overview) during authentication to determine whether the JWT is issued and what scopes it contains.
