Skip to main content

Discord

Discord doesn't implement OpenID Connect. Ory makes a request to Discord's User API and adds the data to std.extVar('claims'). Not all fields are supported. Check the list of supported fields in the source code.

The identify scope adds these fields:

iss                 # always https://discord.com/api/v6/oauth2/
sub # numeric discord user id
name # username + # + discriminator
nickname # username
preferred_username # username
picture # avatar url
locale # user locale

The email scope adds these fields:

email               # user email
email_verified # whether email is verified

Follow these steps to add Discord as a social sign-in provider to your project using the Ory Console:

  1. Go to AuthenticationSocial Sign-In in the Ory Console.

  2. Click the switch next to the Discord logo to start the configuration.

  3. Copy the Redirect URI and save it for later use.

  4. Create a Discord OAuth2 application by clicking the New Application button.

  5. After creating the application, navigate to the OAuth2 | General section of the registered application in Discord and copy the following data to the corresponding fields in the form in the Ory Console:

    • CLIENT ID
    • CLIENT SECRET
  6. From the OAuth2 → General section in Discord, add the saved Redirect URI from Ory to the Redirects of the registered application.

  7. In the Scopes field of the form in the Ory Console, add the following scopes:

    • identify
    • email
  8. In the Data Mapping field of the form in the Ory Console, add the following Jsonnet code snippet, which maps the desired claims to the Ory Identity schema:

    local claims = {
    email_verified: false,
    } + std.extVar('claims');

    {
    identity: {
    traits: {
    // Allowing unverified email addresses enables account
    // enumeration attacks, if the value is used for
    // verification or as a password login identifier.
    //
    // Therefore we only return the email if it (a) exists and (b) is marked verified
    // by Discord.
    [if 'email' in claims && claims.email_verified then 'email' else null]: claims.email,
    },
    },
    }
    danger

    Don't save secrets such as API keys, credentials, or personal data directly in Jsonnet code snippets. Jsonnet code snippets used for data mapping aren't stored in an encrypted format in Ory Network.

  9. Click Save Configuration.

Troubleshooting

When you add a social sign-in provider, you can encounter common problems such as:

  • Redirect URI mismatch
  • Redirect loops during registration
  • Domain verification issues

To troubleshoot those issues, read Social sign-in troubleshooting.