用户登录认证
HappyShip 使用 NextAuth.js 提供现代化的用户认证系统,支持 Google OAuth 登录,自动管理用户账户和积分系统。
🔐认证系统概述
HappyShip 模板的认证系统特点:
- NextAuth.js - 业界标准的 Next.js 认证库
- Google OAuth - 安全的第三方登录
- JWT 策略 - 无状态会话管理
- 自动用户创建 - 首次登录自动分配积分
- Supabase 集成 - 用户数据存储和管理
📁核心文件结构
# 认证系统文件结构
src/lib/auth.ts # NextAuth.js 配置
src/components/auth/SignInDialog.tsx # 登录弹窗组件
src/components/providers/SessionProvider.tsx # 会话提供者
src/app/api/auth/[...nextauth]/route.ts # API 路由处理
types/next-auth.d.ts # TypeScript 类型定义
🔧 配置文件
auth.ts 包含 Google OAuth 配置和用户创建逻辑
🎨 UI 组件
SignInDialog 提供美观的模态登录界面
🔄用户登录流程
1
点击登录按钮
用户在需要登录时点击登录按钮,弹出登录对话框
2
Google OAuth 认证
重定向到 Google 进行安全认证,用户授权应用访问基本信息
3
用户账户处理
系统检查用户是否存在,新用户自动创建账户并分配 3 积分
4
会话建立
生成 JWT Token,用户登录成功,可以使用所有功能
⚙️快速配置
📝 环境变量设置
# .env.local
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
NEXTAUTH_SECRET=your_nextauth_secret
NEXTAUTH_URL=http://localhost:3000
🔧 Google OAuth 设置
前往 Google Cloud Console 创建 OAuth 应用
配置回调 URL:
/api/auth/callback/google
获取客户端 ID 和密钥,添加到环境变量
💡代码使用示例
在组件中获取用户会话
import { useSession } from 'next-auth/react';
export default function MyComponent() {
const { data: session, status } = useSession();
if (status === 'loading') return 'Loading...';
if (!session) return 'Please sign in';
return `Hello, {session.user.name}!`;
}
在 API 路由中验证用户
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
export async function POST() {
const session = await getServerSession(authOptions);
if (!session) {
return Response.json({ error: 'Unauthorized' }, { status: 401 });
}
// 处理已认证用户的请求
}
🎯 认证系统总结
HappyShip 的认证系统简单而强大,开箱即用的 Google 登录为用户提供安全便捷的认证体验。系统自动处理用户创建、积分分配和会话管理,让你专注于核心业务功能开发。
🚀 快速集成
只需配置 Google OAuth,即可拥有完整认证系统
🔒 安全可靠
基于 NextAuth.js 和 JWT,业界标准安全实践
⚡ 自动化
自动用户创建、积分分配,无需额外开发
🔐 让用户轻松登录,专注于创造价值!