Skip to content

Social providers

The Auth UI supports 27 OAuth providers through Better Auth. Each one you turn on adds a “Sign in with …” button to the sign-in form, and signed-in users can link it to their account from the user profile.

Turn on a provider

Each provider takes three steps.

  1. Set its key to true:

    src/convex/auth.constants.ts
  2. Create an OAuth app in the provider’s developer console. Its Better Auth guide, linked in the table below, shows where. Follow only the part that gets you the credentials: src/convex/auth.ts already configures every provider.

  3. Set the credentials in Convex:

Set them on every Convex deployment (development, preview, production), and register each environment’s callback URL with the provider.

Callback URL

Register this redirect URL in the provider’s OAuth app:

Sign-in requests go through your app’s /api/auth/[...all] route to Convex, so the callback is on your app’s domain, not on .convex.site. Locally that’s http://localhost:5173, for example http://localhost:5173/api/auth/callback/githubhttp://localhost:3000, for example http://localhost:3000/api/auth/callback/github.

The provider id is the AUTH_CONSTANTS key, except for X, whose Better Auth id is twitter: https://<your-app>/api/auth/callback/twitter.

Supported providers

Credentials are named <KEY>_CLIENT_ID and <KEY>_CLIENT_SECRET, with the key in capitals. TikTok is the exception: it takes a client key, TIKTOK_CLIENT_KEY.

KeyProviderConvex environment variables
appleAppleAPPLE_CLIENT_ID, APPLE_CLIENT_SECRET
atlassianAtlassianATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET
discordDiscordDISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET
dropboxDropboxDROPBOX_CLIENT_ID, DROPBOX_CLIENT_SECRET
facebookFacebookFACEBOOK_CLIENT_ID, FACEBOOK_CLIENT_SECRET
figmaFigmaFIGMA_CLIENT_ID, FIGMA_CLIENT_SECRET
githubGitHubGITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET
gitlabGitLabGITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET
googleGoogleGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
huggingfaceHugging FaceHUGGINGFACE_CLIENT_ID, HUGGINGFACE_CLIENT_SECRET
kakaoKakaoKAKAO_CLIENT_ID, KAKAO_CLIENT_SECRET
kickKickKICK_CLIENT_ID, KICK_CLIENT_SECRET
lineLINELINE_CLIENT_ID, LINE_CLIENT_SECRET
linearLinearLINEAR_CLIENT_ID, LINEAR_CLIENT_SECRET
naverNaverNAVER_CLIENT_ID, NAVER_CLIENT_SECRET
notionNotionNOTION_CLIENT_ID, NOTION_CLIENT_SECRET
paypalPayPalPAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET
redditRedditREDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET
robloxRobloxROBLOX_CLIENT_ID, ROBLOX_CLIENT_SECRET
salesforceSalesforceSALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET
slackSlackSLACK_CLIENT_ID, SLACK_CLIENT_SECRET
spotifySpotifySPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET
tiktokTikTokTIKTOK_CLIENT_KEY, TIKTOK_CLIENT_SECRET
twitchTwitchTWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET
vkVKVK_CLIENT_ID, VK_CLIENT_SECRET
xXX_CLIENT_ID, X_CLIENT_SECRET
zoomZoomZOOM_CLIENT_ID, ZOOM_CLIENT_SECRET