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

# User authentication overview

> Connect wallet, email, and social login to your Snag platform. Supports Dynamic, Thirdweb, Privy, Immutable, Sequence, and Auth0 providers.

<head>
  <script type="application/ld+json">
    {JSON.stringify({
            "@context": "https://schema.org",
            "@graph": [
              {
                "@type": "TechArticle",
                "headline": "User authentication overview",
                "description": "Connect wallet, email, and social login to your Snag platform. Supports Dynamic, Thirdweb, Privy, Immutable, Sequence, and Auth0 providers.",
                "author": {"@type": "Organization", "name": "Snag Solutions", "url": "https://www.snagsolutions.io/"},
                "publisher": {"@type": "Organization", "name": "Snag Solutions", "url": "https://www.snagsolutions.io/", "logo": {"@type": "ImageObject", "url": "https://assets.snagsolutions.io/public/docs/snag-logo-dark-no-bg.svg"}},
                "mainEntityOfPage": "https://docs.snagsolutions.io/user-auth/auth-overview"
              },
              {
                "@type": "BreadcrumbList",
                "itemListElement": [
                  {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://docs.snagsolutions.io/welcome"},
                  {"@type": "ListItem", "position": 2, "name": "User Auth", "item": "https://docs.snagsolutions.io/user-auth/auth-overview"},
                  {"@type": "ListItem", "position": 3, "name": "Auth overview"}
                ]
              }
            ]
          })}
  </script>
</head>

<Frame>
  ![Snag user authentication overview showing supported wallet and social providers](https://assets.snagsolutions.io/public/docs/user-auth-overview.png)
</Frame>

## Supported authentication providers

* [Dynamic (EVM, Solana, SUI)](/user-auth/dynamic)
* [Thirdweb](/user-auth/thirdweb)
* [Privy](/user-auth/privy)
* [Immutable Passport](/user-auth/immutable)
* [Sequence Wallet](/user-auth/sequence)
* [Auth0](/user-auth/auth0)

## How it works

<Steps>
  <Step title="Choose your authentication providers">
    Select one or more authentication providers that best fit your platform.
  </Step>

  <Step title="Gather the required credentials">
    Each provider requires specific keys and configurations. Refer to the
    separate provider pages for details on what to provide.
  </Step>

  <Step title="Send us your credentials">
    Once you have all the required details, share them with us. Our team will
    set up authentication on your behalf.
  </Step>
</Steps>

## User identification across providers

* **Non-custodial wallets (e.g., MetaMask)**: Snag identifies users by `wallet_address`. If your app also identifies users by the same on-chain wallet, you can treat the user as the same across both systems and complete rules via that `wallet_address`.

* **Email/Social login via embedded wallet providers (e.g., Dynamic, Privy, Thirdweb)**: When a user logs in with email or social auth via an embedded wallet provider, an embedded wallet is issued. Snag uses that embedded wallet address as the user's identifier. If your backend uses a different provider or configuration than Snag, the same person may receive different embedded wallet addresses in your system vs. Snag.

<Warning>
  Because different providers or configurations can produce different embedded wallets for the same email, do not assume the embedded wallet address is shared between systems. Always use the embedded wallet created within Snag when interacting with Snag.
</Warning>

<AccordionGroup>
  <Accordion title="How does our backend complete a task for a web2 (email) user on Snag?">
    Use the <strong>embedded wallet address issued by Snag's authentication flow</strong> for that user. Pass this address from your client to your backend (or fetch it server-side via your wallet provider SDK for the Snag session) and call Snag using that <code>wallet\_address</code> to complete tasks or query user state.
  </Accordion>

  <Accordion title="What if the user connects a non-custodial wallet (e.g., MetaMask)?">
    The identifier is the on-chain <code>wallet\_address</code>. You can use the exact same address across your app and Snag to reference the same user and complete external rules.
  </Accordion>
</AccordionGroup>

<Tip>
  Best practice: Store a mapping in your backend between your primary user ID and the <code>wallet\_address</code> that Snag recognizes (non-custodial or Snag-embedded). This guarantees you can reliably retrieve the correct user on Snag when initiating rewards or tasks.
</Tip>

<Note>
  If you maintain your own user IDs, set <code>externalIdentifier</code> when creating users in Snag. See the API docs: <a href="/loyalty/development/create-users#external-identifier">Create Users – External Identifier</a>.
</Note>

## Related pages

<CardGroup cols={2}>
  <Card title="Set up Overview" icon="rocket-launch" href="/setup/setup-overview">
    Complete setup checklist for launching your Snag platform.
  </Card>

  <Card title="Create Users via API" icon="user-plus" href="/loyalty/development/create-users">
    Programmatically create and manage user accounts.
  </Card>

  <Card title="Multi-Wallet Support" icon="wallet" href="/loyalty/multi-wallet-support">
    Link multiple wallets to a single user identity.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/introduction">
    Authentication, endpoints, and base URL configuration.
  </Card>
</CardGroup>
