看到有同学在开发群里问:有些小程序为啥可以一步获取手机号和头像昵称?
正巧自己的项目最近也做了这个改造,其实只是获取了手机号,头像昵称是通过 open-data 组件展示,并没有真正获取。
提供一套登录流程思路:
- 用户初始访问页面时,通过云函数,拿到当前微信用户的 openid;
- 用这个 openid 去查询数据库,能查到则直接登录,查不到则弹出手机号授权,注册新用户;
- 用户登录后判断,如果数据库里已有头像昵称则直接展示,如果没有则用 open-data 组件展示头像昵称;
- 当用户触发某个流程时(例如支付流程),判断是否有头像昵称,没有则弹出获取头像昵称的授权,更新数据库。
这样做登录流程还有一个好处,用户只在注册时会弹出授权框,后续都是无感登录。
注意:可以在本地存储记住用户 openid,以便在上述第一步和第二步中判断使用。即便用户点击退出登录按钮也不要清除本地存储的 openid,而是用另一个本地存储键值去标记登录状态。
2021-12-28 更新:
今天在开发工具突然看到这个提示:https://developers.weixin.qq.com/community/develop/doc/000e881c7046a8fa1f4d464105b001
看起来,这个带有争议性的能力,官方在上线三年多之后,终于意识到问题的严重性了。
本文技术已过时,open-data 展示用户个人信息的能力即将被回收。
云函数获取 openid 很方便:
const getOpenid = async () => { const { OPENID } = cloud.getWXContext() return OPENID }