最近在鼓捣国内的付费系统,但是觉得传统的用户注册流程过于繁琐,对于小体量的小项目来说开发和维护一套这样的系统得不偿失。因此构想了一个基于邮箱的用户注册付费流程,大家帮忙看看有什么问题没有。
流程
-
APP 用户本地生成 UUID 并填写他的邮箱地址
-
后台用邮箱地址和 UUID 计算出 MD5 ,并用后台私钥签名 MD5 ,然后发送给用户邮箱
-
用户从邮箱中复制数据并回填到 APP 中
-
APP 本地计算出 MD5 然后和用户从邮箱复制过来的数据验签
-
如果验证通过则说明用户确实持有这个邮箱地址,并将这个邮箱地址加密保存到 APP 本地,否则让用户重复上面的流程。
-
后台检查数据库是否已存在邮箱对应的购买记录,不存在则生成订单信息并标记邮箱地址
-
APP 收到订单信息发起支付
-
支付成功后,后台收到回调,将该邮箱的购买记录存入数据库
-
后台以邮箱、UUID 、时间戳和设备等信息记录已付费邮箱的激活记录
-
用户用本地认证的邮箱和 UUID 询问后台,如果激活记录小于 2 条则记录并允许激活
-
如果激活记录 >= 2 则阻止激活,除非让旧设备注销,如果旧设备丢失可以以邮箱发送邮件申请人工注销。
可能存在的问题
- UUID 生成规则
- 可以考虑别的生成算法比如雪花算法之类的
- MD5 不够可靠
- 可以用 SHA3 或者 SHA256 摘要算法
- 发送到用户邮箱的数据可能太长
- 可以考虑只将摘要算法计算出的散列的中间部分进行签名以缩短签名
- 用户本地 Hack 已认证邮箱
- 用 AES 加密了扔进 MMKV 里面来增大难度
- 用户难以知道其他已购买用户的邮箱
- 保留用户从邮箱复制回填的签名数据并用作后续的认证
- 旧设备的注销可能繁琐
- 丢失设备的情况下人工注销会比较麻烦,但是这个量级应该很少
