From 91620893f03cf5ceb340a9d1ae969e7ce3aa531f Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Thu, 23 Jul 2026 15:15:44 +0530 Subject: [PATCH] fix(social-login): add Discord OAuth login button is_discord_login_enabled was never wired into AuthorizerSocialLogin, so operators with Discord enabled on the backend had no button to trigger /oauth_login/discord. Mirrors the existing Twitch/Roblox pattern: new icon, config flag, hasSocialLogin check, button block. Closes #64 --- src/components/AuthorizerSocialLogin.tsx | 18 ++++++++++++++++- src/contexts/AuthorizerContext.tsx | 2 ++ src/icons/discord.tsx | 25 ++++++++++++++++++++++++ src/types/index.ts | 2 ++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/icons/discord.tsx diff --git a/src/components/AuthorizerSocialLogin.tsx b/src/components/AuthorizerSocialLogin.tsx index fa5d9ca..b6c9065 100644 --- a/src/components/AuthorizerSocialLogin.tsx +++ b/src/components/AuthorizerSocialLogin.tsx @@ -13,6 +13,7 @@ import { Twitter } from '../icons/twitter'; import { Microsoft } from '../icons/microsoft'; import { Twitch } from '../icons/twitch'; import { Roblox } from '../icons/roblox'; +import { Discord } from '../icons/discord'; export const AuthorizerSocialLogin: FC<{ urlProps?: Record; @@ -28,7 +29,8 @@ export const AuthorizerSocialLogin: FC<{ config.is_twitter_login_enabled || config.is_microsoft_login_enabled || config.is_twitch_login_enabled || - config.is_roblox_login_enabled; + config.is_roblox_login_enabled || + config.is_discord_login_enabled; // AuthorizerPasskeyLogin always renders immediately after this component // (AuthorizerRoot, web/app's login.tsx) and owns its own "OR" separator // for whatever follows it - suppress this one so the two don't stack. @@ -182,6 +184,20 @@ export const AuthorizerSocialLogin: FC<{
)} + {config.is_discord_login_enabled && ( + <> + { + window.location.href = `${config.authorizerURL}/oauth_login/discord?${queryParams}`; + }} + > + + Continue with Discord + +
+ + )} {hasSocialLogin && !willShowPasskey && (config.is_basic_authentication_enabled || diff --git a/src/contexts/AuthorizerContext.tsx b/src/contexts/AuthorizerContext.tsx index 9e93eee..23324aa 100644 --- a/src/contexts/AuthorizerContext.tsx +++ b/src/contexts/AuthorizerContext.tsx @@ -31,6 +31,7 @@ const AuthorizerContext = createContext({ is_microsoft_login_enabled: false, is_twitch_login_enabled: false, is_roblox_login_enabled: false, + is_discord_login_enabled: false, is_email_verification_enabled: false, is_basic_authentication_enabled: false, is_magic_link_login_enabled: false, @@ -111,6 +112,7 @@ let initialState: AuthorizerState = { is_microsoft_login_enabled: false, is_twitch_login_enabled: false, is_roblox_login_enabled: false, + is_discord_login_enabled: false, is_email_verification_enabled: false, is_basic_authentication_enabled: false, is_magic_link_login_enabled: false, diff --git a/src/icons/discord.tsx b/src/icons/discord.tsx new file mode 100644 index 0000000..d84ad6d --- /dev/null +++ b/src/icons/discord.tsx @@ -0,0 +1,25 @@ + +export const Discord = () => { + return ( +
+ + + +
+ ); +}; diff --git a/src/types/index.ts b/src/types/index.ts index 8f9558c..da1676c 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -14,6 +14,7 @@ export type AuthorizerConfig = { is_microsoft_login_enabled: boolean; is_twitch_login_enabled: boolean; is_roblox_login_enabled: boolean; + is_discord_login_enabled: boolean; is_email_verification_enabled: boolean; is_basic_authentication_enabled: boolean; is_magic_link_login_enabled: boolean; @@ -56,6 +57,7 @@ export type AuthorizerContextPropsType = { is_microsoft_login_enabled: boolean; is_twitch_login_enabled: boolean; is_roblox_login_enabled: boolean; + is_discord_login_enabled: boolean; is_email_verification_enabled: boolean; is_basic_authentication_enabled: boolean; is_magic_link_login_enabled: boolean;