For AI agents: a documentation index is available at /llms.txt. A markdown version of this page is available at the same URL with .md appended (or via Accept: text/markdown).
Skip to main content

Facebook sign-in with Embedded Wallets

Facebook Login lets users authenticate with a Facebook account. Choose the default connection for the quickest setup, or configure a custom connection when you need your own Facebook app, consent screen, or identity provider.

Default Facebook sign-in

The default connection uses the Facebook OAuth credentials managed by Embedded Wallets. You don't need a Meta for Developers app.

Caveats

  • The Facebook consent screen identifies the OAuth application managed by Embedded Wallets, not your dapp.
  • You can't change the Facebook application configuration, such as its scopes or branding, because you don't own the credentials.
  • The default connection and a custom connection are separate connections, so they produce different wallet addresses for the same person unless you link them with a group connection.

Configure the default connection

  1. Open your project in the MetaMask Developer Dashboard.
  2. Select Social Connections.
  3. Enable Facebook.
Facebook in the Social Connections settings

The SDK reads the connection from the dashboard. You don't need to add Facebook credentials to your SDK configuration.

Custom Facebook sign-in

Use a custom connection when the Facebook authorization belongs to your dapp or an identity platform you control. You can register a Facebook App ID and App Secret on the social connection, or run Facebook through Auth0, Firebase, Amazon Cognito, or your own backend.

Preserve wallet addresses

Decide between the default and a custom connection before you onboard users. Moving from the default Facebook connection to a custom Facebook, Auth0, Firebase, Amazon Cognito, or JWT connection changes every user's wallet address unless both connections are in a group connection with matching user identifiers.

Your Facebook app

  1. Create a Facebook app and select Consumer so you can use Facebook Login.

    Facebook app type

  2. Set up Facebook Login on the app.

    Facebook Login product setup
  3. Add https://auth.web3auth.io/auth as a Valid OAuth Redirect URI.

    Facebook Valid OAuth Redirect URIs
  4. Copy the App ID and App Secret from Settings > Basic.

    Facebook App ID and App Secret
  5. In the MetaMask Developer Dashboard, open Social Connections, select the settings icon next to Facebook, and enter an Auth Connection ID, the Facebook App ID, and the Facebook App Secret.

Facebook connection settings

Call Embedded Wallets with AUTH_CONNECTION.FACEBOOK and that Auth Connection ID.

Auth0

  1. Configure Facebook as a social connection in Auth0.
  2. Create an Auth0 connection in the MetaMask Developer Dashboard.
  3. For an implicit flow, call Embedded Wallets with the Auth0 connection ID and set the Auth0 connection name to facebook.
  4. For a JWT flow, authenticate with the Auth0 SDK, retrieve its raw ID token, and pass that token to Embedded Wallets.

Firebase Authentication

  1. Enable Facebook sign-in in Firebase.
  2. Create a Firebase connection in the MetaMask Developer Dashboard.
  3. Sign the user in with the Firebase SDK and obtain a fresh Firebase ID token.
  4. Pass the Firebase ID token and your Firebase connection ID to Embedded Wallets using the JWT flow.

Amazon Cognito

  1. Configure Facebook as a social identity provider in Amazon Cognito.
  2. Create an Amazon Cognito connection in the MetaMask Developer Dashboard.
  3. Authenticate through Cognito, obtain a fresh Cognito ID token, and pass it to Embedded Wallets using the JWT flow.

Your own backend

  1. Complete Facebook Login in your client and send the access token or Facebook-limited login token to your backend.
  2. Validate the token with Facebook's Graph API or JWKS before trusting the identity.
  3. Issue a fresh JWT with an iat no more than 60 seconds old and expose the signing public key through a JSON Web Key Set (JWKS) endpoint.
  4. Create a custom JWT connection that validates your issuer, audience, JWKS, and user identifier.
  5. Pass your JWT and custom connection ID to Embedded Wallets.

Don't send a Facebook App Secret to a client application.

Group Facebook connections

A group connection gives the same person one wallet address across several login methods.

Default Facebook, a native Facebook app, and Facebook through Auth0 or Firebase are separate connections. They produce different wallet addresses unless you group them and every connection in the group uses the same JWT user identifier (email or an aligned sub).

Pass both the child connection ID and grouped connection ID when you bypass the modal:

await connectTo(WALLET_CONNECTORS.AUTH, {
authConnection: AUTH_CONNECTION.CUSTOM,
authConnectionId: '<FACEBOOK_AUTH_CONNECTION_ID>',
groupedAuthConnectionId: '<GROUPED_AUTH_CONNECTION_ID>',
idToken,
})

Usage examples

The implicit examples open a Facebook or Auth0 authorization flow. The JWT examples assume your Auth0, Firebase, Cognito, or backend integration has already returned a fresh ID token.

Default implicit flow

import { AUTH_CONNECTION, WALLET_CONNECTORS } from '@web3auth/modal'
import { useWeb3AuthConnect } from '@web3auth/modal/react'

const { connectTo } = useWeb3AuthConnect()

await connectTo(WALLET_CONNECTORS.AUTH, {
authConnection: AUTH_CONNECTION.FACEBOOK,
})

Native custom implicit flow

Use these examples after you add your own client ID on the social connection in the dashboard. For Android and iOS, add the connection to authConnectionConfig during initialization. Flutter, Unity, and Unreal Engine currently use their platform's loginConfig; configure it by following the custom authentication guide for Flutter, Unity, or Unreal Engine.

await connectTo(WALLET_CONNECTORS.AUTH, {
authConnection: AUTH_CONNECTION.FACEBOOK,
authConnectionId: '<AUTH_CONNECTION_ID>',
})

Auth0 implicit flow

These examples use the Auth0 custom connection configured for your SDK. Replace the connection ID and domain with your Auth0 values. For Android and iOS, add the connection to authConnectionConfig during initialization. Flutter, Unity, and Unreal Engine currently use their platform's loginConfig; configure it by following the custom authentication guide for Flutter, Unity, or Unreal Engine.

await connectTo(WALLET_CONNECTORS.AUTH, {
authConnection: AUTH_CONNECTION.CUSTOM,
authConnectionId: '<AUTH0_CONNECTION_ID>',
extraLoginOptions: {
connection: 'facebook',
},
})

JWT flow

Obtain a fresh ID token from your identity aggregator or backend before calling Embedded Wallets. The token issuer and claims must match the custom connection in the dashboard.

const idToken = await getIdToken()

await connectTo(WALLET_CONNECTORS.AUTH, {
authConnection: AUTH_CONNECTION.CUSTOM,
authConnectionId: '<CUSTOM_CONNECTION_ID>',
idToken,
})