小程序授权登录流程详情步骤

2023-11-07

样式展示实例:

这个原理是: 我们开发的软件 ,调用微信app弹框,这个框主要是获取当前微信登录的用户的信息( 允许/取消)

  • 允许就是允许我们开发的软件,获取微信的登录的用户信息

    通俗: 获取微信用户的信息去登录

  • 不允许

通俗: 不允许获取微信用户的信息去登录

第一步:首先是获取用户信息

注意:现在官方 getUserProfile已经进行了更新调整,目前只有低版本才可以继续使用

 

官方链接:https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01 

1.建议使用的技术:wx.getUserProfile(Object object)

wxLogin() {
				// 第一步是获取微信用户的基本信息
				wx.getUserProfile({
					// 描述你获取我手机上的微信app的登录用户的作用
					desc: "用于完善会员资料",
					//弹出授权框之后,你点击允许 success
					success: (res) => {
						console.log(res);
					},
					//弹出授权框之后,你点击取消 fail
					// fail: (err) => {
					// }
				})

			}

 注意:会出现报错情况,或者是点击无法出现弹框情况,一般是可以检查自己开发ID,或者是更改小程序开发的版本,版本过高也是无法显示.

第二步:在授权登录之后,拿到用户信息

解决问题, 怎么让个人中心页面使用我们登录页面的信息

总结: 两个页面怎么共享数据

方法一: vuex 

方法二: 存储到本地(localstorage , sessionstorage) 

两种方法都可以,根据自己需求进行选用

1.拿到数据之后,我们把用户信息存到本地:wx.setStorageSync(string key, any data)

2.存到本地之后,接下来就是继续登录,拿到微信服务端给的code值

````js
wx.login({
    success:(res)=>{
        // 得到code的值
    }
})

````

3.发异步请求,访问后台,请求拿到code值,拿到的值,需要转化成字符串

api_loginCode  (自己封装的api接口 换成自己的即可) 

wx.login({
            success: async res => {
              // console.log(res);
              // 拿到code访问后台接口发请求
              let data = await api_loginCode({
                code: res.code
              });
              // console.log(data);
              // 把token存到本地
              wx.setStorageSync('token', JSON.stringify(data));
              // 全部做完 跳转到个人中心
              wx.reLaunch({
                url: '/pages/personCenter/personCenter'
              });
            }
          });

4.把请求拿回来的token值存到本地中,然后跳转到个人中心页面

// 全部都做完了,跳转到个人中心
                                wx.switchTab({
                                    url: '/pages/personCenter/personCenter'
                                })

5.登录完整代码:

methods: {
    wxLogin() {
      // 第一步是获取微信用户的基本信息
      wx.getUserProfile({
        // 描述你获取我手机上的微信app的登录用户的作用
        desc: '用于完善会员资料',
        //弹出授权框之后,你点击允许 success
        success: res => {
          // console.log(res);
          // 把数据存到本地 本地是存的字符串  但是wx.setStorageSync是一个对象
          wx.setStorageSync('userInfo', JSON.stringify(res.userInfo));
          // 再次调用微信登录 需要拿到code
          wx.login({
            success: async res => {
              // console.log(res);
              // 拿到code访问后台接口发请求
              let data = await api_loginCode({
                code: res.code
              });
              // console.log(data);
              // 把token存到本地
              wx.setStorageSync('token', JSON.stringify(data));
              // 全部做完 跳转到个人中心
              wx.reLaunch({
                url: '/pages/personCenter/personCenter'
              });
            }
          });
        }
      });
    }
  }

第三步:跳转到个人中心页面

1.首先头部页面有两个,一个是未登录,一个是登录,需要根据userInfo信息来渲染

	<!-- 头部有两个 ,一个是登录转态的 -->
		<view class="header" v-if="userInfo.nickName">
			<image class="userImg" :src="userInfo.avatarUrl" mode=""></image>
			<view class='userInfo'>
				<view @click="exit">退出登录</view>
			</view>
		</view>
		<!-- 未登录状态的 -->
		<view class="header" v-else>
			<image class="userImg" src="../../static/images/personal/personal.png" mode=""></image>
			<view class='userInfo'>
				<view @click="tologin">未登录</view>
			</view>
		</view>

2.跳转到个人中心组件,相当于发送了异步请求,再定义变量,来接收本地存户的信息,拿到的值需要转化成对象形式

async mounted() {
    let userInfo = wx.getStorageSync('userInfo');
    // console.log(userInfo);
    if (userInfo) {
      // 有值代表登录 有值在转化为对象
      this.userInfo = JSON.parse(userInfo);
      // 有值 有登录 在发请求
      let res = await api_loginToken({
        token: JSON.parse(wx.getStorageSync('token'))
      });
      // console.log(res);
      this.info = res;
    } else {
      // 没有值代表没有登录
    }
  },

3.在有值的情况下,要发送请求,是要拿到个人中心,我的资产信息

第四步:退出登录

1.退出登录的话,是要清空用户信息,清空token信息

methods: {
    // 退出登录  清空本地存储 不能清空所有,只需要清空userInfo和token
    goback() {
      // wx.clearStorageSync();
      wx.removeStorageSync('userInfo');
      wx.removeStorageSync('token');
      wx.reLaunch({
        url: '/pages/personCenter/personCenter'
      });
    },
    tologin() {
      wx.navigateTo({
        url: '/pages/login/login'
      });
    }
  }

画图进行理解一下,关于小程序授权登录步骤:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序授权登录流程详情步骤 的相关文章

  • 在vue3中如何使用百度地图API(详细步骤+demo示例)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 注册账号 申请成为开发者 二 申请密钥AK 三 在vue3 0中使用百度地图API 提示 以下是本篇文章正文内容 下面案例可供参考 一 注册账号 申请成为开发者
  • linux VM与容器的存储IO性能测试

    linux VM与容器的存储IO测试 测试由KVM vmwarm virtualbox生产的VM和docker容器的存储IO性能 测试过程 1 分别在同一台物理机安装kvm和virtualbox的hypervisor 生产kvm virtu

随机推荐

  • 网络网段分类

    A类网段 0 0 0 0 127 255 255 255 B类网段 128 0 0 0 191 255 255 255 C类网段 192 0 0 0 223 255 255 255 D类网段 224 0 0 0 239 255 255 25
  • python多变量赋值和三元表达式出错(求解答)

    直接给出问题吧 以后只在定义是进行多变量同时赋值算了 希望有大神能够解答 定义变量 minL 0 a 0 b 1 subL 2 print minL a b subL 0 0 1 2 方法一 minL a subL b if subL lt
  • STM32双串口

    STM32双串口的使用 最近老是需要stm32通过串口去跟WiFi模块 蓝牙模块 openmv进行数据交互 然后需要用到stm32的串口调试 就把这个程序整理成一个工程 方便调试 实验目的 外设模块 WiFi模块 蓝牙模块 openmv 发
  • 神经网络调参:loss 问题汇总(震荡/剧烈抖动,loss不收敛/不下降)

    目录 1 模型不收敛主要原因 1 1 learning rate设大了会带来跑飞 loss突然一直很大 的问题 1 2 数据库太小一般不会带来不收敛的问题 1 3 尽量用小模型 2 模型loss 不下降 2 Loss 函数不收敛 2 1 l
  • electron 应用优雅的配置 about 信息

    使用 electron 的 dialog tray 托盘栏菜单优雅简单的配置 about 关于本应用的信息 效果下图所示 项目依赖 electron 24 4 1 electron builder 23 6 0 electron build
  • 库默尔定理学习小记

    A组又出现了逆天的数竞定理 随便口胡一下 定理 有两个正整数n m p是质数 Cnn m C n m n含 的幂次等于 在 进制下的进位数 简略证明 Cnn m C n m n含 的幂次 i 1 n mpi i 1 npi i 1 mpi
  • Oracle入门笔记(九)——视图、序列、索引、同义词和权限等

    视图和索引 1 视图 2 序列 3 索引 4 同义词 5 数据控制语言 DCL 6 执行计划 1 视图 视图是 基于数据表或者另外一个视图的逻辑表 类似于一个数据表或者数据表间组合之后得到的数据窗口 通过窗口能够查看数据表或者表间组合时候得
  • ELK 企业级日志分析系统(理论加实战部署详解)

    ELK 企业级日志分析系统 理论加实战部署详解 文章目录 一 ELK 概述 1 1 ELK 的工作原理 二 部署详解 一 ELK Elasticsearch 集群部署 在Node1 Node2节点上操作 二 ELK Logstash 部署
  • 【搜索引擎Solr】配置 Solr 以获得最佳性能

    Apache Solr 是广泛使用的搜索引擎 有几个著名的平台使用 Solr Netflix 和 Instagram 是其中的一些名称 我们在 tajawal 的应用程序中一直使用 Solr 和 ElasticSearch 在这篇文章中 我
  • 手撕代码:统计1到n二进制数中1出现的总次数

    题目描述 互娱手撕代码题 统计从1到n这n个数的二进制表示中1出现的次数 思路分析 思路一 直接的做法是从1遍历到n 对于每个数和1做与操作 之后 对于这个数不断做右移操作 不断和1做与操作 直到当前数为0 这样的算法复杂度为O nlogn
  • C++ 播放音频流(PCM裸流)

    直接上代码 如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了 注意将声道和频率与你自己的文件对应 当然我自己也用VS2008写了个例子上传了 如果有需要下载地址如下 点击打开链接 这份代码是打开文件截取一段数
  • vue-amap 高德地图定位 点击获取经纬度和具体地址的使用

    官方文档地址 点这里 经纬度获取只要通过点击事件就可以通过e lnglat来获取 然后就是插件Geocoder使用了 在main js中initAMapApiLoader中写入 AMap Geocoder 注意 官方文档中有提示 所以插件中
  • webpack5 (三)

    webpack 高级配置 其实就是对 webpack 进行优化 让代码在编译 运行时性能更好 1 提升开发体验 2 提升打包构建速度 3 减少代码体积 4 优化代码运行性能 一 提升开发体验 sourcemap 在编译打包后所有的 css
  • 图片无损放大软件Topaz Gigapixel AI 5.5.2 win mac 汉化 mac只有英文版

    Topaz Gigapixel AI 5 5 2 win mac 汉化版 mac只有英文版 今天给大家带来一款超级强大的无损放大图片软件 在放大的同时还能够为你优化图片 真的不要太棒 这个软件的名字叫 Topaz Gigapixel AI
  • 【深度学习】卷积神经网络之图像分类|CNN、AlexNet、VGG、GoogLeNet、ResNet

    一 CNN 卷积神经网络分为卷积层 池化层 全连接层 softmax层 卷积层 卷积核与输入层中的一个区域相连 计算内积后加上权重 激活函数层 激活函数层包括在卷积层中 将相连的神经元进行激活 通常使用ReLu激活函数 m a x 0
  • 什么是元宇宙数字人,它距离我们还有多远呢?

    近期 元宇宙数字人 成为全球热议的焦点 众多资本方争相进入 使得互联网正在迎来转型为 元宇宙 的窗口期 究竟什么是 元宇宙数字人 它距离我们还有多远呢 元宇宙 最早是由是由科幻作家尼尔 斯蒂芬森于1992年在其著作 雪崩 中提出原始概念 元
  • list用Stream通过实体类的指定字段去重,排序

    public void testSelect List
  • 二叉树的前序,中序,后序,层序遍历实现(递归,迭代两种方式)

    先定义Node节点对象 public class Node public int value public Node left public Node right public Node int value Node left Node r
  • Qt - 菜单栏、工具栏、状态栏(自定义菜单)

    菜单栏 工具栏 状态栏 主窗口框架拥有自己的布局 包括以下组件 菜单栏 菜单栏包含了一个下拉菜单项的列表 这些菜单项通过QAction动作类实现 一个主窗口只能有一个菜单栏 工具栏 工具栏一般用于显示常用的菜单项 也可插入其他窗口部件 一个
  • 小程序授权登录流程详情步骤

    样式展示实例 这个原理是 我们开发的软件 调用微信app弹框 这个框主要是获取当前微信登录的用户的信息 允许 取消 允许就是允许我们开发的软件 获取微信的登录的用户信息 通俗 获取微信用户的信息去登录 不允许 通俗 不允许获取微信用户的信息