"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 { Input } from "@nice/ui/components/input"; import { Label } from "@nice/ui/components/label"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@nice/ui/components/tabs"; import { toast } from "@nice/ui/components/sonner"; import { useState } from "react"; export default function BetterAuthDemo() { const [currentUser, setCurrentUser] = useState(null); const [testCredentials, setTestCredentials] = useState({ email: "test@example.com", password: "Test123456", name: "Test User" }); const [discoveryInfo, setDiscoveryInfo] = useState(null); // 获取 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/auth/better-auth-callback", }); if (result.data) { toast.success("OAuth 配置测试成功!"); } else if (result.error) { console.error("OAuth 错误详情:", result.error); toast.error(`OAuth 配置测试失败: ${result.error.message}`); } } catch (error: any) { console.error("OAuth 配置测试失败:", error); 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; } }; // 创建测试用户 const handleCreateTestUser = async () => { try { const result = await client.signUp.email({ email: testCredentials.email, password: testCredentials.password, name: testCredentials.name, }); if (result.data) { toast.success("测试用户创建成功!"); setCurrentUser(result.data); } else if (result.error) { console.error("创建用户失败:", result.error); toast.error(`创建用户失败: ${result.error.message}`); } } catch (error: any) { console.error("创建用户失败:", error); toast.error(`创建用户失败: ${error.message || "未知错误"}`); } }; // 用邮箱密码登录 const handleEmailSignIn = async () => { try { const result = await client.signIn.email({ email: testCredentials.email, password: testCredentials.password, }); if (result.data) { toast.success("邮箱登录成功!"); setCurrentUser(result.data); } else if (result.error) { console.error("邮箱登录失败:", result.error); toast.error(`邮箱登录失败: ${result.error.message}`); } } catch (error: any) { console.error("邮箱登录失败:", error); toast.error(`邮箱登录失败: ${error.message || "未知错误"}`); } }; // 登出 const handleSignOut = async () => { try { await client.signOut(); setCurrentUser(null); toast.success("已登出"); } catch (error: any) { console.error("登出失败:", error); toast.error(`登出失败: ${error.message}`); } }; return (

Better Auth 测试页面

测试认证功能

账户管理 OIDC 信息 OAuth 测试 {/* 账户管理 Tab */} 当前用户状态 查看当前登录状态
{currentUser && ( )}
{currentUser ? (

当前用户信息:

Email: {currentUser.user?.email}
Name: {currentUser.user?.name}
ID: {currentUser.user?.id}
) : (
⚠️ 未登录状态
)}
用户操作 创建测试用户或登录
setTestCredentials({ ...testCredentials, email: e.target.value })} />
setTestCredentials({ ...testCredentials, password: e.target.value })} />
setTestCredentials({ ...testCredentials, name: e.target.value })} />
{/* OIDC 信息 Tab */} OIDC Discovery 端点 查看当前 OIDC Provider 的配置信息 {discoveryInfo && (

Discovery 配置:

                                        {JSON.stringify(discoveryInfo, null, 2)}
                                    
)}
{/* OAuth 测试 Tab */} OAuth2 登录测试 测试 OAuth2 登录功能

⚠️ 注意: 如果出现 "account_not_linked" 错误,请先在"账户管理"标签页中登录。

配置信息 当前 OAuth 配置
Provider ID: fenghuo-oidc
Discovery URL: http://localhost:3001/api/auth/.well-known/openid-configuration
回调 URL: http://localhost:3000/auth/better-auth-callback
); }