登录与授权

news2025/1/14 18:14:45

目录

1.获取用户信息

1.button.open-type.getUserInfo 

2.open-data组件

3.wx.getUserProfile(Object object)

头像昵称填写功能

2.登录

登录的流程图

sessin_key

3.授权

wx.openSetting

wx.getSetting

wx.authorize

手机号授权


登录与授权是两个不关联的事情,登录是为了使用微信的用户体系,即每个微信用户都有一个唯一的openid。授权,比如之前的获取用户头像昵称需要授权,获取地理位置、手机号码需要授权。

1.获取用户信息

包括用户邮箱、昵称、所在地区,获取用户信息需要授权,目前只支持头像昵称填写功能

1.button.open-type.getUserInfo 

时效:2021.4.28后,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息

版本:支持2.20.0版本以下的基础库

作用:可用作用户授权,弹出弹框,用户同意之后可获取授权

// .wxml
<button wx:if="{{canIUse}}" open-type="getUserInfo" 
bindgetuserinfo="getUserInfo">授权登录</button>
// .js
// 获取应用实例
const app = getApp()

Page({
  data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    userInfo: {}
  },
  onLoad() {},
  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,
getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    console.log(e.detail)
    if (e.detail.userInfo) {
      this.setData({
        userInfo: e.detail.userInfo,
        canIUse: false
      })
    } else {
      console.log(e.detail.errMsg)
    }
  },
})

成功返回数据:

wx.getUserInfo(Object object)

必须是在用户已经授权的情况下调用

wx.getUserInfo({
  success: function(res) {
    var userInfo = res.userInfo
  }
})

2.open-data组件

时效:2022.2.21 功能被回收,官方通知如下

作用:展示用户头像、昵称、省份等开放信息

<open-data type="userAvatarUrl"></open-data>

<open-data type="userNickName"></open-data>

3.wx.getUserProfile(Object object)

时效:2022.10.25 功能被回收

作用:需要点击事件触发;用允许授权后才能返回用户信息

//index.wxml 
<button bindtap="getUserProfile"> 点击获取头像昵称 </button>

 <image bindtap="bindViewTap" class="userinfo-avatar" 
src="{{userInfo.avatarUrl}}" mode="cover"></image>
 <text class="userinfo-nickname">{{userInfo.nickName}}</text>
//index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
    userInfo: {},
    hasUserInfo: false,
    canIUseGetUserProfile: false
  },
  onLoad() {
  },
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户
个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },

})

点击按钮弹出授权弹框,点击允许后获取下列信息

头像昵称填写功能

头像选择:利用button组件,设置open-type为chooseAvatar,绑定事件chooseavatar,事件触发回调出头像路径信息

//.wxml 
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
    <image class="avatar" src="{{avatarUrl}}"></image>
</button> 


//.js
 onChooseAvatar(e) {
    const { avatarUrl } = e.detail 
    this.setData({
      avatarUrl,
    })
  }

 昵称填写:input组件,type设置为nickname

  <mp-form>
    <mp-cells>
      <mp-cell title="昵称">
        <input type="nickname" class="weui-input" placeholder="请输入昵称"/>
      </mp-cell>
    </mp-cells>
  </mp-form>

2.登录

登录的流程图

官方的

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

  1. 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
  2. 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥 session_key

注意:临时登录凭证 code 只能使用一次

代码逻辑

sessin_key

注意:  session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥

作用:进行签名校验,确保数据的完整性

wx.getUserInfo(object),没被回收以前可以获取加密的用户信息

 wx.getUserInfo({
      withCredentials: true,
      success(res) {
        console.log('getUserInfo: ', res)
      }
    })

rawData:不包括敏感信息的原始数据字符串

signature:使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息

其中 signature = sha1( rawData + session_key ),前端把 signature、rawData传给后端,后端通过相同的方法计算出 signature2,比对 signature 与 signature2 即可校验数据的完整性。

3.授权

微信的部分接口需要经过用户授权后才能调用,比如用户的地理位置、手机号

wx.openSetting

调起客户端小程序设置界面,返回用户设置的操作结果,需要点击事件触发

调整后“打开小程序设置页”将支持以下两种实现方式:

  • 方法1:使用 button 组件来使用此功能,示例代码如下:

    <button open-type="openSetting" bindopensetting="callback">打开设置页</button>
  • 方法2:由点击行为触发wx.openSetting接口的调用,示例代码如下:

    <button bindtap="openSetting">打开设置页</button>  openSetting() {  wx.openSetting()}

wx.getSetting

获取授权信息:地理位置、用户信息、电话、地址等

授权范围:AuthSetting | 微信开放文档

授权逻辑,以授权地理位置为例:

        进入地图页面,首先调用wx.getSetting()判断用户是否授权,如果未授权,可弹出弹框,引导用户打开设置,wx.openSetting(),开启地理位置权限。如果已授权,可直接调用wx.getLocation()获取用户地理位置信息。

  // 判断是否已授权
  getUserSetting() {
    let that = this
    wx.getSetting({
      success(res) {
        console.log('auth: ', res, res['authSetting'])
        // 判断是否授权个地理位置
        if (res['authSetting'] && res['authSetting']['scope.userLocation'] === true) {
          that.getLocation()
        } else {
          // 未授权
          that.openConfirm()
        }
      }
    })
  },

  // 打开授权弹框
  openConfirm() {
    wx.showModal({
      content: '检测到您没打开定位权限,是否去设置?',
      confirmText: "确认",
      cancelText: "取消",
      success: function (res) {
        //点击“确认”时打开设置页面
        if (res.confirm) {
          wx.openSetting({
            success: (res) => {
              that.getLocation()
            }
          })
        } else {
          console.log('用户点击取消')
        }
      }
    });
  },

  // 获取地理位置信息
  getLocation() {
    var that = this;
    wx.getLocation({
      type: 'wgs84',
      success: function (res) {
        console.log("当前位置: ", res.latitude, res.longitude);

      },
      fail: function (error) {
        if (error.errMsg.indexOf('频繁调用会增加电量损耗' != -1)) {
          vantToast("频繁调用会增加电量损耗, 请稍后再试")
        } else if (error.errMsg === 'getLocation:fail auth deny') { //拒绝授权
          this.setData({ //打开弹框
            authorization: true
          })
        } else if (error.errMsg === 'getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF') { //未开启定位
          vantToast("请打开手机定位功能!")
        }
      }
    })
  },

wx.authorize

提前发起授权请求,调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。

1.用户第一次进入,调用该方法会弹框询问

2.如果用户之前已同意授权则,不会弹框,会直接到success回调,此时可调用wx.getLocation()获取用户地理位置信息

3.如果用户之前拒绝授权,不会弹框,则会直接走fail回调,此时应引导用户打开微信设置-打开地理位置权限,即可以手写弹框引导用户打开。

手机号授权

具体逻辑:用户触发open-type为getPhoneNumber的button,在回调函数里会获取code,利用code从后端换取手机号。(getPhoneNumber返回的code和wx.login() 返回的code不一样)

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Leetcode] 相同的树、对称二叉树

相同的树和对称二叉树都可以使用递归实现。相同的树题目链接&#xff1a;https://leetcode.cn/problems/same-tree/solution/xiang-tong-de-shu-by-leetcode-solution/1.1 递归、深度优先搜索使用递归&#xff0c;将问题转换为 --> 判断当前节点是否相同 判断左右子树分别是…

以前不知道字节面试难在哪,现在体验到了,被虐的很惨...

人们都说&#xff0c;互联网寒冬来了&#xff0c;这个时候还在大面积招人的公司&#xff0c;必然是牛逼的公司。而这个时候勇敢跳槽的人&#xff0c;必然是牛逼的人。于是我开始了字节跳动的社招面试。 为了这天&#xff0c;我前一天排老长的队&#xff0c;理了个利落的发型&a…

蚂蚁帮路由器Antbang A3s V2.0刷入OpenWrt/LEDE

参考资料路由器基本常识_冰色阳光的博客-CSDN博客_路由器bootloader是什么https://www.right.com.cn/forum/thread-3191610-1-1.html已知问题刷入OpenWrt/LEDE后&#xff0c;似乎路由器的Reset键不起作用。路由器在启动时&#xff0c;正常会先运行引导程序Breed&#xff0c;然后…

LinuxC—文件系统学习笔记

文件系统 1 目录和文件 1.1 获取文件属性信息stat 相关函数 stat() 得到file指向的文件并将其属性回填到buf中&#xff0c;面对符号链接文件时获取的是所指向的目标文件的属性 /* Get file attributes for FILE and put them in BUF. */ extern int stat (const char *__res…

Jetson nano 入手系列之5—远程可视化访问:jupyter lab与VNC连接

Jetson nano 入手系列之5—远程可视化访问&#xff1a;jupyter lab与VNC1. jupyter lab1.1 安装jupyter lab1.2 配置jupyter_lab1.3 打开jupyter lab1.3.1 ip地址方式打开1.3.2 cmd中ssh方式打开2. vino与VNC Viewer2.1 vino的安装2.2 Desktop Sharing配置与设置2.3 启动vino s…

ICG-DBCO;吲哚菁绿-二苯基环辛炔,荧光染料标记DBCO

中文名&#xff1a;吲哚菁绿-二苯基环辛炔 英文名&#xff1a;ICG-DBCO&#xff0c;ICG-Dibenzocyclooctyne 分子式: C63H64N4O5S 分子量: 989.27 g/mol 外观&#xff1a;绿色粉末 激发发射波长:785/821nm 结构式&#xff1a; ​ 溶解度&#xff1a;有机溶剂/水 储藏方法…

使用无人机 LiDAR 的重叠树冠的新型植被点云密度树分割模型

Paper题目&#xff1a;A Novel Vegetation Point Cloud Density Tree-Segmentation Model for Overlapping Crowns Using UAV LiDAR Abstract 由于常用的冠层高度模型(CHM)的局限性&#xff0c;在具有高密度和重叠树冠的森林生态系统中检测和分割单个树木经常会导致偏差。针对…

Flink 第3章 反压策略

概述Flink 中文网站的讲解https://flink-learning.org.cn/article/detail/138316d1556f8f9d34e517d04d670626涉及内容&#xff1a;网络流控的概念与背景TCP的流控机制Flink TCP-based 反压机制 1.5之前Flink Credit-based 反压机制 1.5及以后总结与思考网络流控的概念与背景为什…

AtCoder Beginner Contest 283 E - Don‘t Isolate Elements

E - Dont Isolate Elements (atcoder.jp)题意&#xff1a;题意&#xff1a;定义孤独的数为&#xff0c;该数上下左右的数都和它相反给定一个01矩阵&#xff0c;每次操作可以把某一行的数取反&#xff0c;问你把该矩阵变成没有孤独的数的最少操作次数是多少思路&#xff1a;一开…

AI降噪的N种数据扩增方法

数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已 基于统计信号处理的传统噪声抑制方法是通过检测持续的背景声&#xff0c;来估计背景噪声&#xff0c;然后通过估计到的背景噪声计算增益因子对带噪语音进行抑制。但这种方式针对规律的稳态噪声比较…

【算法笔记】最近公共祖先(LCA)算法详解

0. 前言 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 这种算法应用很广泛&#xff0c;可以很容易解决树上最短路等问题。 为了方便&#xff0c;我们记…

企业内训方案|领导力与执行力/TTT内训师/管理者情商修炼

企业内训方案|领导力与执行力/TTT内训师/管理者情商修炼 》》领导力与执行力 从精兵到强将 高绩效团队协作与跨部门沟通 核心人才的管理与激励 卓越管理者的胜任力提升 MTP中层管理技能提升训练 打造高绩效团队 高效沟通技巧 高绩效团队管理&#xff08;中高层/中基层&#xf…

CRM帮助企业实现销售自动化

随着互联网技术的发展&#xff0c;各家企业都善用互联网优势发布各种信息&#xff0c;导致潜在客户被各种推销信息所淹没&#xff0c;销售周期延长&#xff0c;企业可以借助CRM有效规范销售流程&#xff0c;帮助企业实现销售自动化。 前言 各行各业的业务流程中似乎都少不了销…

OSPF综合实验(1.5)

目标&#xff1a; 1、首先进行基于172.16.0.0/16的ip地址规划 首先题中有5个区域和一个RIP共需要5个网段 可以借3位划分为8个网段 172.16.0.0/19 area 0 然后将172.16.0.0/19再借6位分为172.16.0.0/25---172.16.31.128 25作为其中前一个骨干ip网段 172.16.0.0/25在用于只…

TCP滑动窗口机制(附图例)

文章目录前言一、滑动窗口的引出二、流量控制2.1 16位窗口大小2.2 发送缓冲区2.3 逐步解析滑动窗口运作三、快重传机制四、拥塞控制&#xff08;仅供参考&#xff09;五、延迟应答与捎带应答&#xff08;略&#xff09;总结前言 博主个人社区&#xff1a;开发与算法学习社区 博…

测开-刷笔试题时的知识点

圈复杂度&#xff08;暂缓&#xff09;复杂度越大&#xff0c;程序越复杂计算公式&#xff1a;V(G) E - N 2E代表控制流边的数量&#xff0c;n代表节点数量V (G) P 1p为判定节点数几种常见的控制流图&#xff1a;Linux文件权限具有四种访问权限&#xff1a;r&#xff08;可…

进程信号理解3

进程信号理解3 1.什么叫做信号递达 实际执行信号的处理动作叫做信号递达&#xff0c;比如默认&#xff0c;忽略&#xff0c;自定义动作 2.什么叫做信号未决&#xff1f; 信号产生到信号递达的状态叫做信号未决 3.进程被阻塞和进程被忽略有什么区别&#xff1f; 进程被阻塞属…

iPhone更换字体教程,无需越狱,支持所有苹果设备!

上周开始&#xff0c;技术大神zhuowei 发现了一个iOS系统更换字体的漏洞&#xff0c;经过不断修正&#xff0c;现在已经可利用上了&#xff01; 先来看看更换字体后的效果&#xff0c;更换之后&#xff0c;所有App上的字体都得到更改&#xff0c;下图是打开文章的效果 下图是聊…

excel查重技巧:如何用组合函数快速统计重复数据(上)

统计不重复数据的个数&#xff0c;相信不少小伙伴在工作中都遇到过这样的问题。通常的做法都是先把不重复的数据提取出来&#xff0c;再去统计个数。而提取不重复数据的方法之前也分享过&#xff0c;基本有三种方法&#xff1a;高级筛选、数据透视表和删除重复项。其实使用公式…

Ngnix 实现访问黑名单功能

前言 有时候在配置的时候我们会禁用到一些IP&#xff0c;使用nginx 禁用到ip但是需要重启nginx&#xff0c;这样当我们要是实现动态的这种就比较麻烦&#xff0c;当然你可以使用网关来实现相对于nginx实现的这种方式要好很多&#xff0c;但是今天咱们说到这里&#xff0c;那就…