"use client"; import { client } from "@/lib/auth-client"; import { Button } from "@nice/ui/components/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@nice/ui/components/card"; import { toast } from "@nice/ui/components/sonner"; import { useState, useEffect } from "react"; export default function OIDCTestPage() { const [currentUser, setCurrentUser] = useState(null); const [discoveryInfo, setDiscoveryInfo] = useState(null); const [oauthTestResult, setOauthTestResult] = useState(null); const [isLoading, setIsLoading] = useState(true); // 获取 OIDC Discovery 信息 const handleGetDiscoveryInfo = async () => { try { const response = await fetch('http://localhost:3001/api/auth/.well-known/openid-configuration'); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const info = await response.json(); setDiscoveryInfo(info); toast.success("获取 Discovery 信息成功!"); } catch (error: any) { console.error("获取 Discovery 信息失败:", error); toast.error(`获取 Discovery 信息失败: ${error.message || "未知错误"}`); } }; // 测试 Generic OAuth 配置 const handleTestGenericOAuthConfig = async () => { try { const result = await client.signIn.oauth2({ providerId: "fenghuo-oidc", callbackURL: "http://localhost:3000/dashboard", }); if (result.data) { setOauthTestResult({ success: true, data: result.data }); toast.success("OAuth 配置测试成功!"); } else if (result.error) { console.error("OAuth 错误详情:", result.error); setOauthTestResult({ success: false, error: result.error }); toast.error(`OAuth 配置测试失败: ${result.error.message}`); } } catch (error: any) { console.error("OAuth 配置测试失败:", error); setOauthTestResult({ success: false, error: { message: error.message } }); toast.error(`OAuth 配置测试失败: ${error.message || "未知错误"}`); } }; // 检查当前会话 const handleCheckSession = async () => { try { const session = await client.getSession(); console.log("当前会话:", session); setCurrentUser(session.data); toast.success(session.data ? `会话存在: ${session.data.user.email}` : "无活跃会话"); return session.data; } catch (error: any) { console.error("检查会话失败:", error); toast.error(`检查会话失败: ${error.message}`); return null; } }; // 自动检测登录状态 useEffect(() => { const checkSession = async () => { try { setIsLoading(true); const session = await client.getSession(); setCurrentUser(session.data); } catch (error) { console.error("自动检查会话失败:", error); } finally { setIsLoading(false); } }; checkSession(); }, []); // 登出 const handleSignOut = async () => { try { await client.signOut(); setCurrentUser(null); toast.success("已登出"); } catch (error: any) { console.error("登出失败:", error); toast.error(`登出失败: ${error.message}`); } }; return (

OIDC Provider 测试页面

测试 OpenID Connect 相关功能

{/* 当前用户状态 */} 当前用户状态 {isLoading ? "正在检查登录状态..." : "查看当前登录状态和会话信息"}
{currentUser && ( )}
{isLoading ? (
🔄 正在检查登录状态...
) : currentUser ? (

当前用户信息:

Email: {currentUser.user?.email}
Name: {currentUser.user?.name}
Username: {currentUser.user?.username}
ID: {currentUser.user?.id}
) : (
⚠️ 未登录状态 - 请先登录以测试 OIDC 功能
)}
{/* OAuth2 登录测试 */} OAuth2 登录测试 由于自循环配置问题,OAuth2 测试已暂时禁用。请使用直接的 OIDC 流程测试。

⚠️ 注意: 自循环 OAuth 配置已禁用以避免状态冲突。

如需测试 OAuth 流程,请访问 OAuth 调试页面

); }