consumer模块完成度95%,实现数据库多端注册登录,优化安卓端小程序bug
This commit is contained in:
85
pages/mall/consumer/doc/MULTI_TERMINAL_REGISTRATION_GUIDE.md
Normal file
85
pages/mall/consumer/doc/MULTI_TERMINAL_REGISTRATION_GUIDE.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# 多端用户注册与身份识别实现指南 (Multi-Terminal Registration Guide)
|
||||
|
||||
本档说明了如何在当前的 Supabase 架构下实现“消费者端”、“商家端”及“管理端”的统一注册逻辑,并确保用户身份(Role)在入库时能够自动、准确地被识别。
|
||||
|
||||
## 1. 核心架构原理
|
||||
|
||||
系统采用 **“前端声明意图 + 后端自动触发”** 的模式:
|
||||
1. **前端 App**:在调用接口注册时,通过 `raw_user_meta_data` 声明用户的目标角色(如 `consumer` 或 `merchant`)。
|
||||
2. **Supabase Auth**:接收并存储这些元数据。
|
||||
3. **数据库触发器 (Trigger)**:在 `auth.users` 产生新记录的一瞬间,由数据库自动读取元数据,并将用户信息连带其正确的角色属性同步到业务表 `ak_users` 中。
|
||||
|
||||
---
|
||||
|
||||
## 2. 前端实现步骤 (代码参考)
|
||||
|
||||
在各端 App 的注册逻辑中,需在调用 `signUp` 接口时传递 `options.data`。
|
||||
|
||||
### 消费者端 (Consumer App)
|
||||
在 `pages/user/register.uvue` 中:
|
||||
```typescript
|
||||
const options = new UTSJSONObject()
|
||||
const metaData = new UTSJSONObject()
|
||||
metaData.set('user_role', 'consumer') // 核心:声明为消费者
|
||||
options.set('data', metaData)
|
||||
|
||||
const result = await supa.signUp(email, password, options)
|
||||
```
|
||||
|
||||
### 商家端 (Merchant App)
|
||||
在商家端的注册页面中,只需修改 `user_role` 的值:
|
||||
```typescript
|
||||
metaData.set('user_role', 'merchant') // 核心:声明为商家
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 数据库实现步骤 (SQL 设置)
|
||||
|
||||
为了让数据库能够“看碟下菜”,必须在 Supabase SQL Editor 中运行以下脚本,安装/更新智能触发器:
|
||||
|
||||
```sql
|
||||
-- 1. 创建或更新处理函数
|
||||
CREATE OR REPLACE FUNCTION public.handle_new_user()
|
||||
RETURNS trigger AS $$
|
||||
BEGIN
|
||||
-- 向业务表插入数据,并智能识别角色
|
||||
INSERT INTO public.ak_users (id, auth_id, email, role, nickname, status)
|
||||
VALUES (
|
||||
NEW.id,
|
||||
NEW.id, -- 统一使用 Auth ID
|
||||
NEW.email,
|
||||
-- 核心逻辑:读取 metadata 中的 user_role,如果没有传则默认为 'consumer'
|
||||
COALESCE(NEW.raw_user_meta_data->>'user_role', 'consumer'),
|
||||
-- 默认昵称取邮箱前缀
|
||||
split_part(NEW.email, '@', 1),
|
||||
1 -- 默认激活状态
|
||||
);
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- 2. 绑定触发器
|
||||
DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users;
|
||||
CREATE TRIGGER on_auth_user_created
|
||||
AFTER INSERT ON auth.users
|
||||
FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 三端互不干扰的优势
|
||||
|
||||
* **全自动入库**:一旦 SQL 触发器设置完成,前端不再需要手动调用 `ensureUserProfile` 或 `insert` 接口,减少了网络请求和前端报错几率。
|
||||
* **物理隔离与 RLS 安全**:通过 `ak_users` 表的 RLS 策略(`auth.uid() = id`),确保即使用户通过 API 尝试修改他人数据,也会被数据库直接拦截。
|
||||
* **统一维护**:所有端的注册逻辑在数据库层面是统一的,未来若需增加新角色(如 `admin_manager`),只需修改触发器逻辑即可,无需大规模重构代码。
|
||||
|
||||
---
|
||||
|
||||
## 5. 开发建议
|
||||
|
||||
* **强制校验**:在生产环境下,可以在触发器内增加校验逻辑,防止普通用户通过伪造元数据获得 `admin` 角色。
|
||||
* **日志排查**:如果新用户注册后 `ak_users` 表没有数据,请检查 Supabase 控制台的 `Database -> Logs`,查看触发器执行是否有报错(通常是唯一索引冲突导致)。
|
||||
|
||||
---
|
||||
*最后更新时间:2026-03-10*
|
||||
@@ -0,0 +1,76 @@
|
||||
# 电商平台生产环境上线准备清单 (Production Readiness Checklist)
|
||||
|
||||
本指南旨在指导开发者在将“消费者端”和“商家端”推向实际生产环境时,所需准备的各项核心服务申请、资质认定及技术对接点。
|
||||
|
||||
---
|
||||
|
||||
## 1. 身份认证与登录系统 (Identity & Login)
|
||||
|
||||
为了提供丝滑的登录体验,需申请以下第三方服务:
|
||||
|
||||
### A. 微信登录 (WeChat Login)
|
||||
* **主体要求**:必须是企业或个体工商户(个人主体无法开通部分权限)。
|
||||
* **准备工作**:
|
||||
* 在 [微信开放平台](https://open.weixin.qq.com/) 注册账号并完成 **开发者资质认证** (300元/年)。
|
||||
* 创建一个“移动应用”获取 `AppID` 和 `AppSecret`。
|
||||
* 在 [Supabase 控制台](https://supabase.com/dashboard/project/_/auth/providers) 启用 **WeChat Provider** 并填入上述秘钥。
|
||||
* **注意**:如果是微信小程序环境,需在 [微信公众平台](https://mp.weixin.qq.com/) 另外申请小程序账号。
|
||||
|
||||
### B. 手机短信验证码 (SMS Authentication)
|
||||
* **推荐方案**:阿里云短信、腾讯云短信 或 Twilio。
|
||||
* **准备工作**:
|
||||
* **签名申请**:如“【XX商城】”,需提交营业执照审核。
|
||||
* **模板申请**:如“验证码${code},您正在进行登录操作,5分钟内有效。”
|
||||
* **Supabase 对接**:在 Auth -> Providers -> Phone 开启,并配置短信服务商提供的 API 秘钥。
|
||||
|
||||
---
|
||||
|
||||
## 2. 支付与结算系统 (Payments & Settlement)
|
||||
|
||||
支付是电商的命脉,涉及非常严格的合规性审核。
|
||||
|
||||
### A. 消费者端:支付方式与钱包提醒
|
||||
* **资质准备**:
|
||||
* **微信支付**:在 [微信支付商户平台](https://pay.weixin.qq.com/) 申请“商户号”,需关联上述微信 AppID。
|
||||
* **支付宝**:在 [支付宝开放平台](https://open.alipay.com/) 申请“APP支付”或“小程序支付”能力。
|
||||
* **钱包逻辑实现**:
|
||||
* **余额系统**:在数据库中建立 `user_wallets` 表,记录 `balance`(余额)和 `points`(积分)。
|
||||
* **支付拦截器**:用户下单时,需通过后端逻辑(Edge Functions)校验余额是否足够,不足时弹出“余额不足,请充值”或“引导去微信支付”。
|
||||
* **变动提醒**:每当发生消费或退款,需通过 **微信模板消息** 或 **App 推送** 发送钱包变动实时通知。
|
||||
|
||||
### B. 商家端:收款账号与提现
|
||||
* **资金流控制**:生产环境下,资金通常先进入平台大账户(二清合规性建议)。
|
||||
* **提现准备**:
|
||||
* **实名认证**:商家入驻时必须上传 **身份证**、**营业执照**、**开户许可证**。
|
||||
* **打款接口**:需要申请“微信支付-企业付款到零钱”或“支付宝-单笔转账到账户”能力。
|
||||
* **手续费逻辑**:需确定平台抽成比例(佣金),在商家点击提现时自动计算并扣除。
|
||||
|
||||
---
|
||||
|
||||
## 3. 服务器与合规性 (Infrastructure & Compliance)
|
||||
|
||||
* **域名备案**:在中国境内运营,必须完成 **ICP 备案**。
|
||||
* **HTTPS 证书**:所有生产接口必须使用 SSL 证书(不能使用 HTTP)。
|
||||
* **隐私政策与用户协议**:必须在 App 登录页面显著位置提供,且符合 GDPR 或国内网络安全法规定。
|
||||
* **CDN 存储**:商品图片和视频应存放在对象存储(如 Supabase Storage + 自定义 CDN 域名),以保证加载速度。
|
||||
|
||||
---
|
||||
|
||||
## 4. 商家入驻所需材料模板
|
||||
|
||||
建议在商家端后台提供以下材料的上传入口:
|
||||
1. **负责人身份证正反面**。
|
||||
2. **统一社会信用代码证**。
|
||||
3. **银行结算账户信息(开户行、支行名称、账号、持卡人姓名)**。
|
||||
4. **行业特许经营许可**(如卖食品需要《食品经营许可证》)。
|
||||
|
||||
---
|
||||
|
||||
## 5. 技术架构建议 (Production Stack)
|
||||
|
||||
* **数据库保护**:开启 Supabase 的 **RLS (行级安全策略)**,防止数据越权读取。
|
||||
* **日志记录**:接入 **Sentry** 或 **阿里云日志服务**,记录生产环境中的所有前端报错(尤其是支付环节)。
|
||||
* **压力测试**:上线前需进行接口压力测试,确保在促销活动期间数据库连接数不会爆满。
|
||||
|
||||
---
|
||||
*生成日期:2026-03-10*
|
||||
Reference in New Issue
Block a user