# web2 **Repository Path**: hzau1898/web2 ## Basic Information - **Project Name**: web2 - **Description**: 基于 Node.js 24.14 + SQLite 的网站鉴权系统,支持企业微信、CAS 等多种登录方式。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #README.md # Web2 - 网站鉴权系统 基于 Linux + Node.js 24.14 + SQLite 的网站鉴权系统,支持企业微信、CAS 等多种登录方式。 ## 项目信息 - **仓库地址**:https://gitee.com/hzau1898/web2.git - **维护者**:CC - **许可证**:MIT ## 目录结构 ``` web2/ ├── app2.mjs # 根据请求路径进行路由 │ ├── etc/ # 敏感和运行数据(不上传 Git) │ ├── sys/ # 系统配置(secret、SSL) │ ├── db/ # SQLite 数据库(当10万行或文件超过100M时,考虑分表) │ └── data/ # 用户上传文件(data/1/文件超5000分桶) │ ├── etc-def/ # 配置模板(上传 Git) │ ├── sys/ │ ├── db/ │ └── data/ │ ├── bin/ # 每个页面都是独立的可执行单元 │ ├── auth/ # 认证模块 │ ├── subWEB/ # 子业务 │ └── file.mjs # 用户文件[etc/data/]访问入口 │ ├── lib/ # 模块代码 │ ├── session.mjs # 会话管理 │ ├── user.mjs # 用户管理 │ ├── org.mjs # 组织架构 │ ├── db.mjs # 数据库操作 │ ├── storage.mjs # 文件存储 │ ├── wecom.mjs # 企业微信 API │ ├── cas.mjs # CAS API │ └── ... │ ├── built/ # 构建工具 ├── test/ # 单元测试 ├── .gitignore ├── package.json ├── package-lock.json └── README.md ``` text ## 分支策略 本项目采用简化版 Git Flow 分支模型。 ### 分支说明 | 分支 | 用途 | 维护者 | |------|------|--------| | `master` | 主分支 保护分支,所有代码的最终归宿 | CC | | `*/*` | 功能/修改分支 根据心情随意命名 | 所有人 | ### 保护分支 `master` 分支已设置为保护分支: - 可以直接推送 自动创建新分支 - 需要维护者审核 审核通过后合并 ## 贡献指南 ### 第一次参与 ```bash # (可选,不强制)Fork 本仓库(点击右上角 Fork 按钮) # (可选,不强制)添加上游仓库 git remote add upstream https://gitee.com/hzau1898/web2.git # 1. 克隆 git clone https://gitee.com/hzau1898/web2.git cd web2 # 2. 配置本地环境 #为确保团队开发运行环境完全一致 请不要使用npm install npm ci #修改 etc/sys/*.json 填入你的测试配置 cp -r etc-def etc ``` ### 开发流程 ```bash # 1. 同步仓库最新代码 git checkout master git fetch git rebase origin/master # 2. 提交代码 git add . git commit -m '修改说明' git push origin master ``` ### 常见问题 Q:PR 被关闭了怎么办? A:根据关闭原因修改代码,重新创建 PR。 Q:可以直接 push 到 master 吗? A:可以。虽然master是保护分支, 可以自动创建别名提交。 目录权限说明 ```text 目录 提交 Git 说明 bin/ ✅ 页面代码 lib/ ✅ 模块代码 built/ ✅ 构建工具 test/ ✅ 单元测试 etc-def/ ✅ 配置模板 etc/ ❌ 敏感配置(本地创建) node_modules/ ❌ 依赖 ``` ### 服务器部署 ```bash # 1. 克隆仓库(只拉master分支) git clone --depth=1 -b master https://gitee.com/hzau1898/web2.git # 2. 创建配置目录 mkdir -p etc/sys etc/db etc/data # 3. 上传配置文件(手动) # 将 etc/sys/*.json 和 SSL 证书上传到服务器 # 4. 安装依赖 npm install --production # 5. 启动服务 pm2 start app2.mjs --name web2 ``` ## 模块结构 ```text ┌─────────────────────────────────────────────────────────────┐ │ 业务模块(无表) │ │ login.mjs(流程编排) │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 数据模块(有表) │ │ session.mjs(sessions 表) │ │ human.mjs(humans 表) │ │ org.mjs(orgs 表) │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 基础设施模块 │ │ sqlite.mjs(数据库连接) │ │ parseCookie3.mjs(cookie 解析) │ └─────────────────────────────────────────────────────────────┘ ``` ## 实现进度 ``` ✅ 第1层:db (sqlite.mjs) · 已实现 ✅ 第2层:human.mjs · LoginList_load ✅ · LoginList_login ✅ · LoginList_logout ✅ · LoginList_active ✅ · getHuman() ✅ · createHuman() ✅ (待补充) · hMap 缓存 ✅ 🔄 第3层:session.mjs (正在实现) · sMap ✅ · sHead/sTail 双向链表 ✅ · getSession() ✅ · createSession() ✅ · rmSession() ✅ · moveToHead() ✅ · insertToHead() ✅ · load() ✅ · setCookie/decodeSid/ifSafari ✅ · 需要补充:getSessionByAid()、kickSession() ⏳ 第4层:login.mjs (待实现) · login() - 验证账号密码 · logout() - 退出登录 · register() - 注册新用户 · checkAuth() - 鉴权中间件 ⏳ 第5层:路由层 (待实现) · app.post('/login', ...) · app.post('/logout', ...) · app.get('/user/info', ...) ``` ## 纯净对象[Object: null prototype]时间空间下率更高! ```javascript const a={'x':1,'y':2}; const b=Object.create(null); b.x=3; b.y=4; console.log(a,b); //输出 { x: 1, y: 2 } [Object: null prototype] { x: 3, y: 4 } ``` # 主题切换 ## 原理 ```javascript /* 默认主题(无 data-theme 时) */ :root { --bg: white; --text: black; } /* 深色主题(有 data-theme="dark" 时) */ [data-theme="dark"] { --bg: #1a1a1a; --text: #e0e0e0; } /* 使用变量 */ body { background: var(--bg); color: var(--text); } ``` ## 动态切换 ```javascript // 切换到深色主题 document.documentElement.setAttribute('data-theme', 'dark'); // 切换到亮色主题 document.documentElement.setAttribute('data-theme', 'light'); // 移除属性,恢复默认 document.documentElement.removeAttribute('data-theme'); ///存储用户偏好 // 保存 localStorage.setItem('theme', 'dark'); // 读取 const theme = localStorage.getItem('theme') || 'light'; document.documentElement.setAttribute('data-theme', theme); ///响应系统主题 // 检测系统主题 const darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches; if (darkMode) { document.documentElement.setAttribute('data-theme', 'dark'); } // 监听系统主题变化 window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => { if (e.matches) { document.documentElement.setAttribute('data-theme', 'dark'); } else { document.documentElement.setAttribute('data-theme', 'light'); } }); ///在 JS 中操作变量 // 读取变量 const bgColor = getComputedStyle(document.documentElement) .getPropertyValue('--bg-primary').trim(); // 设置变量 document.documentElement.style.setProperty('--bg-primary', '#000'); ``` ## 完整示例 ```html
内容
``` 许可证:MIT 维护者:CC 仓库:https://gitee.com/hzau1898/web2.git