diff --git a/public/icons/github.png b/public/icons/github.png
new file mode 100644
index 0000000..e28a837
Binary files /dev/null and b/public/icons/github.png differ
diff --git a/public/icons/gitlab.png b/public/icons/gitlab.png
new file mode 100644
index 0000000..feeff61
Binary files /dev/null and b/public/icons/gitlab.png differ
diff --git a/public/icons/google.png b/public/icons/google.png
new file mode 100644
index 0000000..82339b3
Binary files /dev/null and b/public/icons/google.png differ
diff --git a/public/icons/linuxdo.png b/public/icons/linuxdo.png
new file mode 100644
index 0000000..8b67ac5
Binary files /dev/null and b/public/icons/linuxdo.png differ
diff --git a/public/icons/microsoft.png b/public/icons/microsoft.png
new file mode 100644
index 0000000..bfe873e
Binary files /dev/null and b/public/icons/microsoft.png differ
diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx
index 7db27e5..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
;
+ }
+ }
+
+ // 默认图标
+ return (
+
+ );
+}
+
function LoginPageClient() {
const router = useRouter();
const searchParams = useSearchParams();
@@ -85,6 +111,14 @@ function LoginPageClient() {
const { siteName } = useSite();
+ // 处理URL中的error参数
+ useEffect(() => {
+ const errorParam = searchParams.get('error');
+ if (errorParam) {
+ setError(decodeURIComponent(errorParam));
+ }
+ }, [searchParams]);
+
// 在客户端挂载后设置配置
useEffect(() => {
if (typeof window !== 'undefined') {
@@ -384,9 +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'
>
-
+ {getOIDCProviderIcon(siteConfig?.OIDCButtonText || '')}
{siteConfig?.OIDCButtonText || '使用OIDC登录'}