当前位置: 首页 > news >正文

《微信小程序案例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请求服务器把前端传的用户信息数据保存到数据库

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

相关文章:

  • 【Python初级人工智能精讲】用Paddlehub给一段没有标点符号的文字加上合适的标点符号
  • idea使用fiddler抓包分析,fiddler抓取https
  • (附源码)python旅游推荐系统 毕业设计 250623
  • 泛型 和 IO流 和 网络编程
  • js 复制内容到剪切板
  • redis中的锁,通过UUID防止误删
  • 生命在于折腾——浅谈羊了个羊
  • 微雪树莓派PICO笔记——6. I2C(集成电路总线)
  • 容斥原理
  • RealityCapture摄影测量软件
  • TransBigData:一款基于 Python 的超酷炫交通时空大数据工具包
  • 矩阵理论复习部分——线性代数(1)行列式
  • 3 MyBatis 级联操作
  • Vue项目的部署(服务器)
  • 什么是 Docker 镜像层?
  • ----------
  • 230. Kth Smallest Element in a BST
  • CSS中外联样式表代表的含义
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 23种设计模式 之单例模式 7种实现方式
  • laravel5.5 视图共享数据
  • October CMS - 快速入门 9 Images And Galleries
  • 从重复到重用
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端_面试
  • 微信开放平台全网发布【失败】的几点排查方法
  • 一道闭包题引发的思考
  • 再次简单明了总结flex布局,一看就懂...
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 第二十章:异步和文件I/O.(二十三)
  • 移动端高清、多屏适配方案
  • #1015 : KMP算法
  • #git 撤消对文件的更改
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #LLM入门|Prompt#3.3_存储_Memory
  • #大学#套接字
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $jQuery 重写Alert样式方法
  • (1)Nginx简介和安装教程
  • (70min)字节暑假实习二面(已挂)
  • (C语言)逆序输出字符串
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (四)库存超卖案例实战——优化redis分布式锁
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .Net中ListT 泛型转成DataTable、DataSet