简单实现小程序授权登录功能

news/2024/12/5 5:27:40/

       本人给大家带来了关于微信小程序的相关知识,其中主要介绍了怎么实现小程序授权登录功能的相关内容,下面一起来看一下,希望对大家有帮助。

       在我们平时工作、学习、生活中,微信小程序已成为我们密不可分的一部分,我们仔细留意下,每当我们使用一个新的小程序时,总会遇到如下页面: 

       这便是微信小程序授权登录功能了,授权登录后,我们就可以正常使用小程序,而小程序也会获取到我们的用户权益,手机号等个人信息 。

授权登录功能剖析

微信小程序的授权登录具体步骤如下图所示

 

具体实现主要有以下三个步骤:

调用wx.login() 微信api获取临时登录凭证code,并回传到开发者服务器

调用auth.code2Session 微信api接口,获取用户唯一标识OpenID、 用户在微信开放平台帐号下的唯一标识UnionID和会话密钥session_key

通过步骤2获取的参数进行解密操作,获取用户手机号,头像等特性,并把需要的数据保存到缓存中

步骤实现代码如下:

一、获取临时登录凭证code

由于微信官方修改了getUserInfo接口,现在无法实现一进入微信小程序就会自动弹出授权窗口,所以我们只能通过button按钮让用户手动触发

我们先写一个简单的弹框,用isShow变量控制,isShow取决于步骤3中的缓存信息,当所有步骤都走通,会正确缓存用户信息,此时弹框隐藏,否则弹框都为显示状态


<view class='wx_dialog' wx:if="{{isShow}}"><view class='wx_content'><text>需要先授权获取个人信息</text><button class="btn" open-type="getPhoneNumber" type="primary" bindgetphonenumber="getUserInfo">微信账号快速授权</button></view>
</view>

 点击按钮时,调用getUserInfo方法,isShow设置为false,同时使用wx.login获取到登录凭证code

getUserInfo:e=>{this.setData({isShow:false})wx.login({success: function (res) {let code = res.code // 登录凭证code}})       
}

二、根据登录凭证code,获取用户登录信息

拿到登录凭证code后,调用auth.code2Session 微信api接口(此处为服务端操作,后端大佬搞定,我们直接调用他给的接口就好了

wx.request({url: 获取用户信息的auth.code2Session微信api接口,method: 'POST',data:{code:code//登录凭证code},header: {'content-type': 'application/json;charset=UTF-8'},success: function (res) {var userphone= res.data.data                  //解密手机号var msg = e.detail.errMsg;var sessionKey = userphone.session_key;//会话密钥var encryptedData=e.detail.encryptedData; //签名var unionid = userphone.unionid//唯一标识var iv= e.detail.iv;                  //授权成功if (msg == 'getPhoneNumber:ok') {wx.checkSession({success:function(){                        //进行请求服务端解密手机号this.deciyption(sessionKey,encryptedData,iv,unionid);}})}}
})

此时大多数用户信息我们已经获取了,但用户手机号,用户头像等信息还处于加密状态,我们需要去解密获取这些参数

三、根据用户信息,解密获取用户手机号

deciyption(sessionKey,encryptedData,iv,unionid){var that = this;wx.request({url: 解密接口,method: 'POST',data: {sessionKey: sessionKey,encryptedData:encryptedData,iv: iv},header: {'content-type': 'application/json;charset=UTF-8'},success: function(res) {let data = res.dataif (data.resultCode == 'success') {wx.setStorageSync('userTel', data.data.phoneNumber);//存储解密后的用户手机号}else{wx.showToast({title: '获取信息失败请重新授权',icon: 'none'})that.setData({isShow:true})}    },fail:function(res) {wx.showToast({title: '获取失败请重新授权',icon: 'none'})that.setData({isShow:true})}})
},

此时授权登录功能已完成


http://www.ppmy.cn/news/70355.html

相关文章

成都欢蓬信息:抖音电商去年GMV增速超80%

在今年的抖音电商生态大会上&#xff0c;抖音电商交出了年度“成绩单”。 5月16日&#xff0c;抖音电商总裁魏雯雯披露&#xff0c;近一年抖音电商GMV&#xff08;成交额&#xff09;增幅超80%。其中&#xff0c;商城GMV同比增长277%&#xff0c;电商搜索GMV同比增长159%&#…

Vue生成唯一id

精简版 安装nanoid库&#xff08;实际上就是一个函数&#xff09; &#xff0c;是简化版的uuid。 npm i nanoid 使用方式&#xff1a; <script> import {nanoid} from "nanoid";export default {name: "MyHeader",methods: {add(event) {const…

C++之构造函数与虚析构函数

文章目录 构造函数为什么不能被设置为虚函数析构函数为什么可以被设置为虚函数在什么情况下析构函数必须为虚函数构造函数为什么不能被设置为虚函数 1.虚函数调用只需要“部分的信息”,即只需要知道函数的接口(函数返回类型,函数名,参数列表),而不需要对象的具体类型,但…

Zabbix技术分享——Zabbix unreacheable poller解决思路

Zabbix是一个功能强大的网络监控工具&#xff0c;它可以监控各种网络设备、服务器、应用程序等。Zabbix监控数据的收集和处理通过轮询器进程完成&#xff0c;这些进程运行在Zabbix server和Zabbix proxy上。但是&#xff0c;有时候可能会遇到无法访问轮询器进程的问题&#xff…

前端性能优化:如何提高页面加载速度和用户体验

第一章&#xff1a;介绍 当今互联网时代&#xff0c;网站的性能对于用户体验至关重要。一个快速加载的网页不仅能提高用户的满意度&#xff0c;还能增加页面的转化率。而在前端开发中&#xff0c;性能优化是一个永恒的话题。本篇博客将为大家分享一些关于前端性能优化的技巧和…

MySQL高可用之MHA集群

一、MHA概述 1.1 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在…

网工考试常用计算公式汇总,赶紧收藏啦!

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 一、单位的换算 1字节(B)8bit 1KB1024字节 1MB1024KB 1GB1024MB 1TB1024GB 通信单位中 K千 , M 百万 计算机单位中 K2^10 , M 2^20 倍数刚好是1.024的…

ThreadLocal八股文

目录 1. 为什么要⽤ ThreadLocal? 2. ThreadLocal 的原理是什么&#xff1f; 3. 为什么⽤ ThreadLocal 做 key&#xff1f; 4. Entry 的 key 为什么设计成弱引⽤&#xff1f; 5. ThreadLocal 真的会导致内存泄露&#xff1f; 6. 如何解决内存泄露问题&#xff1f; 7. T…