编辑 | blame | 历史 | 原始文档

Vite 企业微信网页授权登录页

一个使用 Vite + Vanilla JavaScript 构建的企业微信网页授权登录应用。

🎯 项目特点

  • ⚡️ 基于 Vite 的超快开发体验
  • 🔧 模块化代码结构
  • 📱 完全响应式设计(移动端优先)
  • 💾 本地存储数据持久化
  • 🎨 现代化 UI 设计
  • 📦 生产级别的构建优化
  • 🔐 企业微信 OAuth 2.0 集成
  • 👤 自动获取登录用户信息

📋 核心功能

1. 企业微信 OAuth 2.0 认证

  • ✅ 自动识别企业微信环境
  • ✅ 支持 OAuth 授权流程
  • ✅ CSRF 防护(State 参数验证)
  • ✅ 会话级数据存储

2. 用户信息获取

  • ✅ 自动获取登录用户的身份信息
  • ✅ 获取用户 ID、姓名、手机号、邮箱等
  • ✅ 支持自定义权限验证

3. 管理员密码功能

  • ✅ 手机号输入和验证
  • ✅ 一键获取管理员密码
  • ✅ 申请次数限制(单个手机号最多5次)
  • ✅ 密码有效期72小时
  • ✅ 历史记录查询
  • ✅ 快速复制功能

📁 项目结构

qiyeWeComApp/
├── src/
│   ├── main.js                    # 应用入口
│   ├── js/
│   │   ├── app.js                 # 应用主逻辑
│   │   ├── wechat-oauth.js         # 企业微信 OAuth 模块
│   │   ├── wecom-config.js         # 企业微信配置
│   │   ├── api-client.js           # API 客户端
│   │   └── utils.js               # 工具函数
│   └── styles/
│       └── main.css               # 样式文件
├── index.html                      # HTML 模板
├── vite.config.js                 # Vite 配置
├── package.json                   # 项目依赖
├── .env.example                   # 环境变量示例
├── server-example.js              # Node.js 后端示例
├── WECOM_OAUTH_GUIDE.md           # OAuth 实现指南
├── WECOM_INTEGRATION_GUIDE.md     # 集成步骤指南
└── README_VITE.md                 # 本文件

🚀 快速开始

安装依赖

npm install
# 或
pnpm install

开发模式

npm run dev

浏览器会自动打开 http://localhost:5173

生产构建

npm run build

生成的文件在 dist/ 目录中。

🔐 企业微信集成

快速配置

1. 配置企业信息

编辑 src/js/wecom-config.js

export const WECOM_CONFIG = {
    corpId: 'ww1234567890abcdef',      // 企业 ID
    agentId: '1000001',                 // 应用 ID
    redirectUri: 'https://your-domain.com/',  // 回调地址
    apiBaseUrl: '/api'                  // API 基础 URL
};

2. 企业微信管理后台配置

  1. 登录 企业微信管理后台
  2. 应用管理 → 创建应用(或编辑现有应用)
  3. 设置 → 启用 OAuth 2.0 授权企业号管理员登录
  4. 配置 授权完成后的跳转链接https://your-domain.com/
  5. 配置 可信域名your-domain.com

3. 后端配置

复制 .env.example.env,填入企业微信配置:

cp .env.example .env

编辑 .env

WECOM_CORP_ID=ww1234567890abcdef
WECOM_APP_SECRET=your_app_secret
WECOM_AGENT_ID=1000001
NODE_ENV=development
PORT=3000

使用流程

用户在企业微信中打开应用
        ↓
前端检查是否有授权码
        ↓
如果无授权码,重定向到企业微信授权页面
        ↓
用户授权,企业微信返回授权码和用户信息
        ↓
前端将授权码发送到后端
        ↓
后端使用授权码交换用户详细信息
        ↓
前端显示用户信息和应用功能

获取用户信息

授权成功后,可以通过以下方式访问用户信息:

// 全局访问
const user = window.currentUser;
console.log(user.userid);    // 用户 ID
console.log(user.name);      // 用户名
console.log(user.mobile);    // 手机号
console.log(user.email);     // 邮箱

后端 API 端点

端点 方法 说明
/api/wecom/getUserInfo POST 使用授权码获取用户信息
/api/wecom/userDetail/:userId GET 获取用户详情
/api/wecom/verify/:userId GET 验证用户权限

📚 详细文档

🔒 安全说明

前端安全

  • ✅ 使用 HTTPS 传输所有数据
  • ✅ State 参数防止 CSRF 攻击
  • ✅ 授权码存储在 sessionStorage(会话级)
  • ✅ 敏感信息不存储在 localStorage

后端安全

  • ✅ 验证 access_token
  • ✅ 实现速率限制
  • ✅ 记录审计日志
  • ✅ 定期轮换 Secret

🛠 技术栈

  • Vite 5.0+: 现代化的前端构建工具
  • HTML5: 页面结构
  • CSS3: 样式设计(含动画和响应式)
  • JavaScript (ES6+): 交互逻辑
  • LocalStorage: 数据持久化
  • Node.js + Express: 后端服务(可选示例)

📱 响应式设计

支持所有设备:
- 📱 手机(320px+)
- 📱 平板(768px+)
- 💻 桌面(1024px+)

❓ 常见问题

Q: 如何在非企业微信环境测试?
A: 使用 src/js/app.js 中的 showAuthPrompt() 显示授权按钮。

Q: 获取的用户信息中没有手机号?
A: 需要在企业微信应用设置中配置权限范围。

Q: 如何实现自动登录?
A: 检查 oauth.isAuthorized() 是否为 true,否则自动跳转授权。

Q: 如何退出登录?
A: 调用 oauth.clearUserInfo() 清除用户信息。

更多问题见 集成指南

🚀 部署指南

1. 构建应用

npm run build

2. 启动后端服务

# 使用示例后端
node server-example.js

# 或使用你的后端服务
npm start

3. 配置反向代理

Nginx 示例:
```nginx
server {
listen 443 ssl;
server_name your-domain.com;

ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

location /api/ {
    proxy_pass http://localhost:3000/api/;
    proxy_set_header Host $host;
}

}
```

4. 验证部署

访问 https://your-domain.com 并在企业微信中打开

📊 性能指标

  • ⚡ 首屏加载时间 < 2s
  • 🎯 Lighthouse 分数 > 90
  • 📦 构建产物大小 < 100KB (gzipped)

🤝 贡献

欢迎提交 Issue 和 Pull Request

📄 许可证

MIT

📞 联系方式

如有问题,请通过以下方式联系:
- 查看 集成指南
- 查看 OAuth 实现指南
- 提交 GitHub Issue


更新时间: 2025年12月9日

相关资源:
- 企业微信开发文档
- OAuth 2.0 规范
- Vite 文档

📋 功能特性

1. 用户信息展示

  • 个人头像展示
  • 用户名称和所属企业信息
  • 专业的渐变色背景设计

2. 密码申请功能

  • 手机号输入和验证
  • 一键获取管理员密码
  • 申请次数限制(单个手机号最多5次)
  • 密码有效期72小时
  • 实时显示剩余申请次数

3. 历史记录管理

  • 展示所有有效的密码记录
  • 包含密码、申请时间、有效期、剩余时间等信息
  • 快速复制功能
  • 自动过期处理

4. 数据存储

  • 使用 localStorage 本地存储历史记录
  • 数据持久化,刷新页面不丢失
  • 自动清理过期记录

📁 项目结构

qiyeWeComApp/
├── src/
│   ├── main.js              # 应用入口
│   ├── js/
│   │   ├── app.js           # 应用主逻辑
│   │   └── utils.js         # 工具函数
│   └── styles/
│       └── main.css         # 样式文件
├── index.html               # HTML 模板
├── vite.config.js          # Vite 配置
├── package.json            # 项目依赖
└── README.md               # 项目说明

🚀 快速开始

安装依赖

npm install
# 或
pnpm install
# 或
yarn install

开发模式

npm run dev

浏览器会自动打开 http://localhost:5173

生产构建

npm run build

生成的文件在 dist/ 目录中

预览生产构建

npm run preview

🔧 技术栈

  • Vite 5.0+: 现代化的前端构建工具
  • HTML5: 页面结构
  • CSS3: 样式设计(含动画和响应式)
  • JavaScript (ES6+): 交互逻辑
  • LocalStorage: 数据持久化

📝 使用说明

手机号要求

  • 必须输入有效的中国手机号
  • 格式:1开头,11位数字

密码规则

  • 6位随机数字
  • 自动生成,无需手动设置
  • 有效期:72小时
  • 每个手机号最多申请5次

功能演示

  1. 输入手机号 → 在输入框中输入有效的手机号码
  2. 点击"获取管理员密码" → 系统生成6位密码
  3. 查看历史记录 → 所有申请的密码及其状态
  4. 复制密码 → 点击操作栏的"复制"按钮,快速复制到剪贴板

🌐 浏览器兼容性

  • Chrome 90+
  • Firefox 88+
  • Safari 14+
  • Edge 90+
  • 移动浏览器(iOS Safari、Android Chrome)

📱 响应式设计

  • 桌面端:优化布局,最大宽度 600px
  • 平板端:自适应缩放
  • 手机端:全屏展示,字体和按钮合理调整

💾 数据持久化

所有数据保存在浏览器的 localStorage 中:
- 键名:loginHistory
- 存储结构:JSON 数组,包含所有密码申请记录

🔒 安全建议

  1. HTTPS 部署:生产环境必须使用 HTTPS
  2. CSRF 防护:如需连接服务器,实现 CSRF 防护
  3. 输入验证:服务器端需要额外验证所有输入
  4. 数据加密:敏感数据传输需加密

🔄 扩展建议

  1. 后端接口集成:连接企业微信 API 进行真实认证
  2. 短信验证:添加短信验证码确认身份
  3. 二次验证:重要操作需要二次确认
  4. 操作日志:记录所有操作日志用于审计
  5. 权限管理:不同角色的权限差异
  6. 框架升级:可迁移到 Vue/React 框架

❓ 常见问题

Q: 密码保存在哪里?
A: 保存在浏览器的 localStorage,仅在当前浏览器和设备上可见。

Q: 刷新页面后历史记录还在吗?
A: 是的,数据保存在本地,刷新不会丢失。

Q: 可以手动删除历史记录吗?
A: 当前版本不支持手动删除,但可以通过清空浏览器缓存实现。

Q: 如何修改企业信息?
A: 编辑 index.html 中的公司名称和公司信息文本。

Q: 如何在生产环境部署?
A: 运行 npm run build,然后将 dist 目录部署到服务器。

📄 许可证

MIT

👤 联系方式

如有问题或建议,请联系技术团队。


更新时间:2025年12月8日