2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00
2026-04-17 16:27:18 +08:00

IMTIM Portal

企业级门户登录基座应用

技术栈

  • 后端: Node.js + Koa (ES Modules)
  • 前端: Next.js 16 (App Router) + React 19 + TypeScript
  • UI组件库: Radix UI + Lucide Icons + TailwindCSS v4
  • 数据库: SQLite + Prisma ORM
  • 认证: Casdoor v3.18.0 (OAuth 2.0)
  • 状态管理: Zustand
  • 部署: Docker (多阶段构建) + Nginx

快速开始

前置要求

  • Node.js >= 20
  • Casdoor v3.18.0 (本地Docker部署)

开发环境

  1. 配置后端
cd backend
cp .env.example .env  # 编辑Casdoor凭据
npm install
npx prisma migrate dev
npx prisma generate
npm run dev  # 启动于 http://localhost:3001
  1. 启动前端
cd frontend
npm install
npm run dev  # 启动于 http://localhost:3000
  1. 访问应用

Docker 部署

docker build -t imtim-portal:latest .

docker run -d \
  --name imtim-portal \
  -p 3000:3000 \
  -e CASDOOR_SERVER_URL=http://your-casdoor:8000 \
  -e CASDOOR_CLIENT_ID=xxx \
  -e CASDOOR_CLIENT_SECRET=xxx \
  -e JWT_SECRET=xxx \
  imtim-portal:latest

项目结构

base-imtim/
├── backend/                    # Koa后端服务
│   ├── prisma/
│   │   ├── migrations/         # 数据库迁移
│   │   └── schema.prisma       # 数据模型
│   └── src/
│       ├── config/             # 配置文件
│       ├── controllers/        # 控制器
│       ├── middleware/         # 中间件(认证等)
│       ├── routes/             # 路由
│       ├── services/           # 业务逻辑
│       └── index.js            # 入口文件
├── frontend/                   # Next.js前端应用
│   └── src/
│       ├── app/                # App Router页面
│       │   ├── api/            # API代理路由
│       │   ├── dashboard/      # 仪表板(需认证)
│       │   ├── login/          # 登录页
│       │   └── page.tsx        # 首页
│       ├── components/         # React组件
│       │   ├── header.tsx      # 导航栏
│       │   ├── layout.tsx      # 布局组件
│       │   └── protected-route.tsx
│       └── lib/
│           ├── api.ts          # HTTP客户端
│           └── auth-store.ts   # 认证状态管理
├── docker/                     # Docker配置
│   ├── Dockerfile              # 多阶段构建
│   ├── nginx.conf              # 反向代理
│   └── start.sh                # 启动脚本
├── docs/                       # 文档
│   └── casdoor-setup.md        # Casdoor配置手册
├── docker-compose.yml          # 开发环境编排
├── PLAN.md                     # 开发计划
└── README.md

API文档

方法 路径 描述 认证
POST /api/auth/login 获取Casdoor登录URL
GET /api/auth/callback OAuth回调处理
POST /api/auth/logout 登出 需要Token
GET /api/auth/user 获取当前用户信息 需要Token
GET /api/health 健康检查

环境变量

后端 (backend/.env)

变量 描述 默认值
CASDOOR_SERVER_URL Casdoor服务器URL http://localhost:8000
CASDOOR_CLIENT_ID 客户端ID -
CASDOOR_CLIENT_SECRET 客户端密钥 -
CASDOOR_ORG_NAME 组织名称 imtim
CASDOOR_APP_NAME 应用名称 base-imtim
CASDOOR_REDIRECT_URI OAuth回调URL http://localhost:3000/api/auth/callback
JWT_SECRET JWT密钥 -
APP_PORT 后端端口 3001
FRONTEND_URL 前端URL http://localhost:3000

前端 (frontend/.env.local)

变量 描述 默认值
NEXT_PUBLIC_API_URL 后端API地址 http://localhost:3001/api
BACKEND_URL 后端服务器URL http://localhost:3001
FRONTEND_URL 前端服务器URL http://localhost:3000

认证流程

1. 用户访问 /login → 点击登录按钮
2. 前端请求 /api/auth/login → 获取Casdoor授权URL
3. 用户跳转到Casdoor登录页面
4. 登录成功后Casdoor回调 /api/auth/callback?code=xxx
5. Next.js API路由重定向到后端 /api/auth/callback
6. 后端用code换取token,获取用户信息
7. 创建/更新本地用户,生成JWT
8. 重定向到 /dashboard?token=xxx
9. 前端存储token到localStorage,后续请求自动携带

文档

License

MIT

S
Description
企业级门户登录基座应用
Readme 74 KiB
Languages
TypeScript 68.1%
JavaScript 23.2%
CSS 5.1%
Dockerfile 3.1%
Shell 0.5%