《微信小程序案例9》小程序登录流程

一、小程序登录流程 

 code:用户凭证

1、获取用户的昵称头像信息的请求wx.getUserProfile

2、使用wx.login获取用户code码

 3、拿到appid和appSecret后使用wx.request去获取openid和sessionkey

appid和appSecret在微信公众平台,我的小程序、开发管理、开发设置里面获取

 拿到appid和appSecret后使用wx.request去获取openid和sessionkey

 若是报错误40029,说明code无效,看看是不是appid是测试号不是注册的真正appid

4、自定义登录态存入缓存storage

 这里还把用户信息存入缓存storage

 

 为什么要用这个缓存?

在生命周期 onLoad 里面使用 wx.getStorageSync 判断这个缓存是否存在:

 如果有缓存就显示一个页面,如果没人缓存就显示未登录。

 未登录就使用 wx.showModal 弹出提示信息:

 如果用户点击确定则使用 wx.switchTab 跳转到登录界面

 

 注意:onLoad只会出现一次,所以还应该是放在onShow里面判断缓存是否存在

微信小程序没有缓存时效的说法

通过设置时间的长度实现,先获取当前时间。

// pages/demo3/demo3.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    hdsrc:"/img/weixin.png",
    name:"登录/注册"
  },
  getLogin: function () {
    // 获取用户信息
    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res);
        var hdsrc = res.userInfo.avatarUrl;
        var nickName = res.userInfo.nickName;
        wx.login({
          timeout: 3000,
          success:(res)=>{
            // console.log(res.code);
            wx.request({
              url: 'https://api.weixin.qq.com/sns/jscode2session',
              method:"GET",
              data:{
                appid:"wxd4229379d53b0345",
                secret:"bf27c58cf21d60710b8b44eeb66f836a",
                js_code:res.code,
                grant_type:"authorization_code"
              },
              success:(res)=>{
                   if(res.data.openid) {
                     this.setData({
                       hdsrc:hdsrc,
                       name:nickName
                     })
                       var logObj = {
                          islogin:1,
                          userinfo:{
                            hdsrc:hdsrc,
                            name:nickName
                          }
                       }
                       wx.setStorageSync('islogin', logObj)
                   }
              }
            })
          }
        })
      }
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

在onShow里面判断缓存

// pages/demo1/demo1.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    islogin:0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
      
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
      console.log(33333);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    var islogin = wx.getStorageSync("islogin");
    console.log(islogin);
    if(islogin) {
      this.setData({
        islogin:1
      })
    }else {
      this.setData({
        islogin:0
      })
      wx.showModal({
        content:"是否前往登录",
        success:(res)=>{
          // 用户点击确定
           if(res.confirm) {
              wx.switchTab({
                url: '/pages/demo3/demo3',
              })
           }else {

           }
        }
      })
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

二、服务器连接数据库、获取数据库数据返回前端

CSDN

三、把用户信息存入数据库

当获取到openid成功时调用wx.request请求服务器把前端传的用户信息数据保存到数据库

 服务器接收前端数据的方法:

物联沃分享整理
物联沃-IOTWORD物联网 » 《微信小程序案例9》小程序登录流程

发表评论