From 575b696c10bec5499273c656cb46534011c28a7e Mon Sep 17 00:00:00 2001 From: mtvpls Date: Sat, 7 Feb 2026 11:55:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AF=86=E5=88=AB=E6=9B=B4?= =?UTF-8?q?=E5=A4=9Aoidc=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/icons/github.png | Bin 0 -> 7249 bytes public/icons/gitlab.png | Bin 0 -> 591 bytes public/icons/google.png | Bin 0 -> 5430 bytes public/icons/microsoft.png | Bin 0 -> 17174 bytes src/app/login/page.tsx | 34 +++++++++++++++++++++++++++------- 5 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 public/icons/github.png create mode 100644 public/icons/gitlab.png create mode 100644 public/icons/google.png create mode 100644 public/icons/microsoft.png diff --git a/public/icons/github.png b/public/icons/github.png new file mode 100644 index 0000000000000000000000000000000000000000..e28a8373067419c7fec89fc78ca44c0197e77ace GIT binary patch literal 7249 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 literal 0 HcmV?d00001 diff --git a/public/icons/gitlab.png b/public/icons/gitlab.png new file mode 100644 index 0000000000000000000000000000000000000000..feeff61934549c38bffcab1a79d7a66fcfece34a GIT binary patch literal 591 zcmV-V00wGYw{5j?; zSp=NM*{G3Z$naqvKlUBiIGeBjIuLS^j^@Cu8wU4*z4}+{4%mYw1u{C}@_je`64(>f zmxv=9_JBs#Xv_wTTU~O$CkwqQ9bWb4JwlP|B_Kv zvz-3=1oSBANK#s^h+1qOqNZI_anSrZ<8s{KX~aX+V9PM}goXK#!!ChcU=P@)#eYxj zhd6TraU^zU(G5(mf&Cd?Ef&XFc?#hNshE6|Z#pyja`u|!+5+#Hj> z-HAmgLankqOGG|I;`4BkFuubYwn~hTgsg d{k+Qz@CQ6(*Z{3^c|-sJ002ovPDHLkV1fio8%Y2F literal 0 HcmV?d00001 diff --git a/public/icons/google.png b/public/icons/google.png new file mode 100644 index 0000000000000000000000000000000000000000..82339b3b1dbbcf4550b737faf99c7774196fb8cb GIT binary patch literal 5430 zcmcgwX>3$g6n=;X+3|<}Oe_lM4}(N0C5Rv{W&J^*wo?RyAcBe}5&;u}0*OVy7L=Ay zXf2DCb|BCKWlMolQL5~P(pm(H?9=IVT4p+(_4u9l<_-5P?F_|ulQZ|;bI*6abC-9Q zk)%%2V^W_!67o1{&f}6aK$4`mIHg_yeFk(dLWd$O6g@IYf<9UzqCvr6a2=!u;tfkR z^2|^uG_Wl^+PcCf8~An;Y_eeRr06G%J;p#^&`W#&+C~cwO(V;@`5-Yh&vvE5}7=D}8hx zzSiZsXwv%)bp1v^?_?0K0r<(~hP$>PS!Oz9AM8gja~C)xcwp8umJ^iSP?sl_;1=C2bSk~ zIqV~QVl4FGK3B%d6U`1WoP*7Cv2eqV&l#JUPn+vD?W*2P%gW}`tm3iqo|;^kKr@RH zY4PD%lwX-eR~DX!e8cgN$vb75Ey(67=P7uRfkXkImj>G|>W zXT}Kf9?R3aA>af^1Lr9{g9Fh;$_Uj zO$l^k#i+>nrk<;6AmH+WGxBYsuGwFCoxNu==CgNCpi{TXRX2vbuCbO1if2-j?re3h zNurQfd;WoQ1CIgX=!LSTaoLI0hQ7}~IF*{c56&3_xvB{G$g^!>r0?n(@2eryDTfPDUI#V#9aW zg7STZ?<{>w_Rz$F;Z%C1NHmG5>^o7Q;pZ4a&N~_`xcMwODJn;w2}JlghJocb$*)|6 zM6;;npzW%G-(M|XWg}Q{^O>a?*k{U>`xbMvSSk&7lL(#*;uuFO`zov&EV%jH)Lg2% zgzt+g|Kh(*E?9z>Xq;lZelGwwpWpu*zwftvA#(Y?#rzGTQa}Ew7yi5P_g5Visdyjc z@z<=s#M9dK*LSCv{F%%UeQ!jK5^1Z6D)T6KJ>Z&m?k z4s&xt950}*S?DE)JO+L>j?`HWTD#FjJNJ5MSBZx*QRcUd+Rk}eMzi`HHqe9156*rH zyYdU2@^}@jH*Irke2V^KDKA~wEO>iR1lLNDo6Cr&JM>i#tdtUu!-(<5xroL;azZ^F zI@+pt$MaqZF3lTHjRpDvXs_3UZruscS4*2{$lJ!Zr#=q0S@2C0F-D)@+om6Pm0Qix z&hJD+4D5^7IInszx)yUiu?k8 z10_|E2qK~~GdH`@9=;55lyHgjMj7wN?OyiY%vw?RV_+}{(X$}` zkiRp}d#2#VM9RE@(KQaI zUnaWs7TXteX8N); ON)^VQz<8Ga>-ryC<7BY_ literal 0 HcmV?d00001 diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 5077215..1fb174b 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -67,6 +67,32 @@ function VersionDisplay() { ); } +// 根据按钮文本识别OIDC提供商并返回对应的图标 +function getOIDCProviderIcon(buttonText: string) { + const text = buttonText.toLowerCase(); + + const providers = [ + { keywords: ['linuxdo'], icon: '/icons/linuxdo.png', alt: 'LinuxDo' }, + { keywords: ['github'], icon: '/icons/github.png', alt: 'GitHub' }, + { keywords: ['google'], icon: '/icons/google.png', alt: 'Google' }, + { keywords: ['microsoft', 'azure', 'entra'], icon: '/icons/microsoft.png', alt: 'Microsoft' }, + { keywords: ['gitlab'], icon: '/icons/gitlab.png', alt: 'GitLab' }, + ]; + + for (const provider of providers) { + if (provider.keywords.some(keyword => text.includes(keyword))) { + return {provider.alt}; + } + } + + // 默认图标 + return ( + + + + ); +} + function LoginPageClient() { const router = useRouter(); const searchParams = useSearchParams(); @@ -392,13 +418,7 @@ function LoginPageClient() { onClick={() => window.location.href = '/api/auth/oidc/login'} className='mt-4 w-full inline-flex justify-center items-center rounded-lg border-2 border-gray-300 dark:border-gray-600 bg-white/60 dark:bg-zinc-800/60 py-3 text-base font-semibold text-gray-700 dark:text-gray-200 shadow-sm transition-all duration-200 hover:bg-gray-50 dark:hover:bg-zinc-700/60' > - {(siteConfig?.OIDCButtonText || '').toLowerCase().includes('linuxdo') ? ( - LinuxDo - ) : ( - - - - )} + {getOIDCProviderIcon(siteConfig?.OIDCButtonText || '')} {siteConfig?.OIDCButtonText || '使用OIDC登录'}