聊聊小程序的登录逻辑

  

        

  

        

  

     18年4月份官方对获取用户信息的               

  

        

  

        

  

     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。getSetting获取用户的授权情况,如果用户已经授权,直接调用wx.getUserInfo接口获取用户的最新信息进行更新和展示。      

  

     

  

     session_key建立关联关系,这里的随机数非常像SessionID。对于使用令牌机制的开发者其实也是可以的,通过用户ID来进行用户身份识别,不用随机数减少了频繁更新数据库表中自定义登录态的操作。      

  

        

  

  
  

聊聊小程序的登录逻辑