不管什么应用,用户账号体系都可以设置两张表,一张系统用户表,一张真实信息表;
用户表有OPEN_ID字段,真实信息表有手机号字段。
用户进入系统,生成一条用户数据;用户验证手机号后,生成一条真实信息数据;这条真实信息数据关联了那条用户数据;
没有关联真实信息的用户,称为游客;关联了真实信息的用户,称为注册用户。
公众号菜单入口进行微信网页授权获取用户的OPEN_ID,并将其保存在COOKIE中;用户验证完手机号后,将手机号也存进COOKIE;
微信授权后,有OPEN_ID:
先从COOKIE中获取手机号,得到空串或者手机号:
手机号查询真实查询真实信息:
找到真实信息,真实信息查询用户数据:
找到用户数据,赋值OPEN_ID;——老用户授权,完善或覆盖OPEN_ID。
没找到用户数据,添加有OPEN_ID,真实信息主键ID的用户数据;——手机号没有关联系统用户,基本不会出现。
没找到真实信息,OPEN_ID查询用户数据:
没有找到,添加有OPEN_ID的用户数据,称之为游客;找打了,就不添加。——游客,也有可能是COOKIE-PHONE失效,之后会删除。
验证手机号,有手机号:
通过手机号查询真实信息,有则返回真实信息主键ID,没有添加有手机号的真实信息数据,返回主键ID;
从COOKIE中获取OPEN_ID,得到空串或OPEN_ID:
真实信息主键ID查询用户数据:
没有找到用户数据:
如果OPEN_ID是空串,初始化一条用户数据;关联手机号,返回验签;——COOKIE中没有OPEN_ID的游客注册
OPEN_ID不是空串,用该OPEN_ID去数据库找到该用户数据;关联手机号,返回验签;——游客注册
找到用户数据,删除所有该OPEN_ID下,真实信息为NULL的用户数据;如果用户数据OPNE_ID为空,赋值OPEN_ID,保存用户数据,返回验签。——老用户登录