聊聊小程序的登录逻辑
一直聊的都是客户运营方面的话题,毕竟斗金客户运营系统小程序产品是依靠技术实现的,今天来聊聊大家都能感知到的小程序登录问题吧,大家可能都碰到过很多小程序刚打开就要求授权获取信息之类的烦人弹框,如果点拒绝后续有些功能没法用,用户觉得产品好想再同意又找不到地方,这样做其实用户体验非常差。
微信小程序官方也发现了这个问题,其实与他们最初接口设计不太合理也有一定关系,所以 18年4月份官方对获取用户信息的 wx.getUserInfo 接口 进行了调整。虽然这方面文章网上也有不少,但在实际中,仍有很多产品把这块没实现好。要么弹出授权框,要么安全性上处理的不好,或多或少存在一些问题。今天借此机会分享一下斗金客户运营系统小程序在开发中的一些心得体会或收获吧。
如何设计好小程序登录流程呢?有关产品设计方面的问题及关于用户体系产品架构方面的问题不做过多展开讨论。只讨论小程序的登录,且只讨论没有自己的用户体系,不存在绑定账号等操作,完全借助微信用户体系的设计和开发逻辑。文中涉及的一些专有名词大家可以参考微信官方文档寻求解释。
我们做登录流程设计的原则是,在保证良好用户体验的情况下做好安全性设计工作。
首先在小程序启动时,不要弹出任何需要授权的弹框,有些文章说在启动 onLanuch时可以通过wx.login静默获取用户openid在数据库建立用户信息,我个人觉得这也是不可取的,这样做的话很多仅仅只是打开小程序而非目标用户的人也会被数据库记录,数据库冗余的垃圾数据就非常多。用户打开小程序后不做任何干扰,让他正常查看使用,只是在用户做敏感操作比如支付、查看余额、查看我的订单、查看我的拼团、查看我的优惠券、领优惠券、参加拼团等需要登录操作时才进行登录。首先判断localStorage是否存在自定义登录态,如果存在则wx.checkSession检查微信服务器上的登录态,如果有效则为真正的已登录允许继续做敏感操作;如果localStorage存在登录态,但是wx.checkSession过期,则重新调用wx.login获取session_key和openid(只更新session_key即可),然后返回给小程序自定义登录态并更新本地localStorage,在用户无感知的情况下进行了更新登录态;如果localStorage不存在自定义登录态,则提示用户需要登录并跳转到个人中心页面,等用户点击个人中心的“授权登录”按钮时进行下一步操作。
用户点击 “授权登录”时(提前先先静默调用wx.login接口获取session_key和openid)获取用户微信绑定的手机号,如果数据库表中同一条记录存在该手机号和openid,则直接更新session_key并返回登录态到本地localStorage即可;如果数据库表中不存在该手机号和openid,则插入一条记录(相当于注册)并返回登录态到本地localStorage;如果数据库表中同一条记录只存在手机号或只存在openid,则提示用户登录失败需要联系管理员处理。登录以后用户如果获取过头像、昵称等信息则进行展示,如果是初次登录或没有获取过头像昵称,则用户点击默认头像或昵称时调用 wx.getUserInfo 接口获取用户头像昵称等信息进行插入数据库表并展示。
最佳实践,由于用户可能会更改自己的微信头像和昵称,应该定时比如用户点击个人中心 Tab时使用wx.getSetting获取用户的授权情况,如果用户已经授权,直接调用 wx.getUserInfo接口获取用户的最新信息进行更新和展示。
上图是微信小程序官方的一张登录流程图,在图中官方建议开发者用随机数作为自定义登录态。这样必须和 session_key建立关联关系,这里的随机数非常像SessionID。对于使用token机制的开发者其实也是可以的,通过用户ID来进行用户身份识别,不用随机数减少了频繁更新数据库表中自定义登录态的操作。
如有不明白或不清晰的地方欢迎交流,如果有错误,还请指正。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。