微信小程序之登录注册

小白随笔,大神勿理 —— 微信小程序之登录注册流程

  1. Reference material(参考材料):
    微信开发者工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
    微信小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/index.html
    授权登陆流程,参看 官方API - 登陆接口
    官方文档给出的登录流程:

    20180521140234249.png

  2. Prerequisite(前提条件):知道的微信小程序的一些API接口的规则

  • wx.login():调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。调用此方法获取的code只能用与一次校验。即检验后是否成功都会失效
wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://test.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})
  • wx.getSetting() : 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
  • wx.getUserInfo():获取用户信息。
    -wx.getStorageSync():获取本地缓存中指定的 key。
try {
  var value = wx.getStorageSync('key')
  if (value) {
    // Do something with return value
  }
} catch (e) {
  // Do something when catch error
}
  • wx.request():发起 HTTPS 网络请求。
wx.request({
  url: 'test.php', //仅为示例,并非真实的接口地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默认值
  },
  success (res) {
    console.log(res.data)
  }
})
  1. 重头戏:
  • 正常流程:如微信官方文档所示:
    3.1. 调用wx.login获取code → code用于wx.request向服务器请求参数,(服务器会调用appid+appsecret+code校验后返回session_key+openid等),服务器认证成功后会返回一个自定义登录态(token之类)。
    3.2. 后端返回自定义登录态后,我们便可以用这个登录态通过wx.request()去向服务器请求数据啦~~
  • 自我见解:在官方demo的结论下,我们可以延申一下整个登录注册的流程:
    jianshu1.png
  • 注意!!:由于自定义登录态有使用时效,对于使用本地过期的自定义登录态,用户信息等去请求数据不成功的时候,应该调用login方法重新去获取自定义登录态和用户信息。
  1. demo
demo: function() {
    var token = wx.getStorageSync('token')
    var userInfo=wx.getStorageSync('userInfo')
    if(token&&userInfo){
      app.globalData.token = token;
      app.globalData.userInfo=userInfo;
      wx.navigateTo({
        url: "路径"
      })
    }else{
      this.login()
    }
  },
 //判断与获取用户信息
  login: function(url) {
    var that = this;
    // 登录
    wx.login({
      success: allres => {
        //去服务器获取token,即登录或注册
        listrequest.miniLogin(allres.code).then(function(res) {
          if (res返回的数据不存在?) {
            //如果不存在,转过去注册
            that.register(url)
          } else {
             app.globalData.token=res.data.data.token
             app;globalData.userInfo=res.data.data.userInfo
             wx.setStorage({
               key:'token',
               data:res.data.data.token
             })
            wx.setStorage({
               key: 'userInfo',
               data: res.data.data.userInfo,
             })
            console.log(res2);
            wx.navigateTo({
              url: url
            })
          }
        })
      }
    })
  },
//注册
  register: function(url) {
    var that = this;
    wx.login({
      success: allres => {
        //重新调用一次wx.login,因为每次的code只能用一次
        wx.getUserInfo({
          success: res => {
            var data = {
              code: allres.code,
              iv: res.iv,
              encryptedData: res.encryptedData
            }
            var header = {
              'content-type': 'application/x-www-form-urlencoded' //默认值
            }
            //调用服务器注册
            listrequest.miniRegister(data, header).then(function(res) {
              if(res.data.code==200){
                app.globalData.token = res中的token;
                app.globalData.userInfo=res中的userinfo
                wx.setStorage({
                  key: 'token',
                  data: res.data.token
                })
               wx.setStorage({
                 key: 'userInfo',
                 data: res.data.data.userInfo,
               })
                wx.navigateTo({
                  url: url
                })
              }
            })
            // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
            // 所以此处加入 callback 以防止这种情况
            if (this.userInfoReadyCallback) {
              this.userInfoReadyCallback(res)
            }
          },
          fail: res => {
            console.log("获取用户信息失败")
          }
        })
      }
    })
  },
到这里,登录注册的功能就差不多啦,欢迎与小编探讨问题,或者是向小编提出错误,欢迎留言提问~~~~~~
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 微信小程序的使用可以快速的基于场景进行用户圈的建立推广,其中根据业务需要使用用户信息以及授权过程,主要用到的...
    极乐叔阅读 1,201评论 1 4
  • 小程序面试题 小程序授权登录流程 0、如何获得用户信息...
    X秀秀阅读 1,828评论 0 8
  • 每天的学习记录,可能有的地方写的不对,因为刚学,以后发现错的话会回来改掉整体流程 https://develope...
    有点健忘阅读 4,753评论 0 7
  • 写在前面 微信小程序出来也蛮久了,经过了市场的考验,已经站稳脚跟,融入到了各行各业,市场需求激增打来的是开发人员的...
    月梦佳期阅读 1,711评论 1 1
  • 今天天气不错哦
    宠儿0823阅读 201评论 0 0