webman + uniapp 组合需明确两端职责与数据契约,注册时前端必须传 source 字段(如 miniprogram),后端据此分流处理(跳过密码校验、写入 openid 等),并统一 redis 限频 key 与 cookie/token 适配策略。

Webman + Uniapp 是能快速落地高性能移动端后台的组合,但“快”不等于“无脑照抄”。很多开发者卡在注册流程不通、用户数据对不上、跨端权限错乱这几个点上,根本原因是没理清两端职责边界和数据契约。
Uniapp 前端注册请求必须带 source 字段
Webman Admin 默认只认 web 来源的用户,而 Uniapp 小程序或 App 端注册时若不显式传 source,后端会按默认值处理(通常是 web),导致后续 openid 校验失败或权限策略误判。
- 前端必须在注册 payload 中明确指定来源,例如:
{username: "u1", password: "123456", source: "miniprogram"} -
source值需与数据库字段wa_users.source的枚举一致(常见值:web/miniprogram/app) - 若用
uni.login获取微信登录态,source应固定为miniprogram,不能动态拼接或留空
Webman 后端需校验 source 并分流处理逻辑
单纯加字段不够,控制器必须根据 source 决定是否跳过密码强度校验、是否写入 openid、是否绑定 unionid。否则小程序用户注册时仍走 web 全流程,会报“密码不符合规则”或“用户名已存在”等误导性错误。
Webman 2.2.0版本强化了 TCP/UDP 服务支持,优化路由组管理,并增强异步任务处理能力。结合协程与连接池技术,Webman 能轻松应对高并发场景,适用于网站、接口服务、即时通讯、物联网及游戏开发,兼具高性能、灵活扩展与稳定可靠,是多场景 PHP 服务开发的理想选择。
- 在
Miniprogram::register()方法中,先取$request->post('source'),再做分支判断 - 小程序注册应允许弱密码(如 6 位纯数字),但需强制校验
code换取 openid,且openid必须唯一入库 - 若
source === 'miniprogram',则跳过v::key('password', ...)验证,改用v::optional(v::stringType()->length(6, 32)) - 注意:Redis 限频 key 要带上
source,避免小程序用户被 web 端注册流量误封,例如:register:ip:{$ip}:{$source}
Uniapp 调用 Webman 接口时跨域与 Cookie 处理易出错
开发阶段用 HBuilder X 调试时,uni.request 默认不带 Cookie,而 Webman Admin 的 session 依赖 PHPSESSID。结果就是:前端看似登录成功,后端却查不到登录态,菜单权限全失效。
- 必须在
uni.request中显式开启凭据:withCredentials: true - H5 端需确保域名同源(或 Nginx 反向代理统一域),否则浏览器直接拦截带 Cookie 请求
- 小程序端不走 Cookie,改用 header 透传 token,Webman 后端需适配:
$request->header('Authorization')解析 Bearer token - 测试时用 Postman 或 curl 验证接口本身是否正常,排除前端构建层干扰(比如 uni-app 的条件编译漏写了某平台配置)
最常被忽略的是数据库字段和后端模型的强一致性——哪怕只差一个默认值(比如 source 字段设了 DEFAULT 'web',但小程序注册没传该字段),就可能导致后续所有基于 source 的权限路由、日志统计、运营分析全部偏移。别省那几行字段校验代码。










