微信小程序授权登录

news2024/11/24 6:34:41

微信小程序—授权登录

一、小程序登录

登录流程时序

说明:

1.小程序端调用 wx.login() 获取临时登录凭证code ,并回传到开发者服务器。

2.服务器调用 code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:

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

2.临时登录凭证 code 只能使用一次

二、微信授权获取用户信息

后端获取微信用户信息流程

1.判断session_key有没有过期

通过 wx.login 接口获得的用户登录态拥有一定的时效性。小程序端需要用wx.checkSession判断session_key是否过期,如果过期就重写登入获取新的code,后端在去请求code2Session获取新的session_key

示例代码

wx.checkSession({

  success() {

    // session_key 未过期,并且在本生命周期一直有效

  },

  fail() {

    // session_key 已经失效,需要重新执行登录流程

    wx.login() // 重新登录

  }

})

2.判断用户是否授权

小程序端调用wx.getSetting来判断,用户是否授权,如果没有授权,需要点击按钮,调起授权页面。用户点击同意授权以后,就可以调用wx.getUserInfo接口获取数据返回值中只会出现小程序已经向用户请求过的权限。

示例代码 

wx.getSetting({

  success(res) {

    console.log(res.authSetting)

    //部分结果,如果为true,则表示该用户对这项权限以及授权,如果没有授权,我们这需要通过button按钮让用户授权

    // res.authSetting = {

    //   "scope.userInfo": true,

    //   "scope.userLocation": true

    // }

  }

})

注意事项

  1. wx.authorize({scope: "scope.userInfo"}),不会弹出授权窗口,请使用 <button_open-type="getUserInfo">
  2. 需要授权 scope.userLocation 时必须配置地理位置用途说明

3.获取用户信息

小程序端调用wx.getUserInfo前需要用户授权scope.userInfo, 已经授权,可以直接调用 getUserInfo 获取头像昵称

接口调整说明

在用户未授权过的情况下调用此接口,将不再出现授权弹窗,会直接进入 fail 回调。在用户已授权的情况下调用此接口,可成功获取用户信息。

4.开放数据校验与解密

签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。

数据签名校验

为了确保开放接口返回用户数据的安全性,微信会对明文数据进行签名。开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性。​​​​​​​​​​​​​​

1.通过调用接口(如 wx.getUserInfo)获取数据时,接口会同时返回 rawData、signature,其中 signature = sha1( rawData + session_key )​​​​​​​

2.开发者将 signature、rawData 发送到开发者服务器进行校验。服务器利用用户对应的 session_key 使用相同的算法计算出签名 signature2 ,比对 signature 与 signature2 即可校验数据的完整性。

当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

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

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

相关文章

2021年长三角高校数学建模竞赛A题Go!Fun游长三角解题全过程文档及程序

2021年长三角高校数学建模竞赛 A题 Go!Fun游长三角 原题再现&#xff1a; 又到一年毕业季&#xff0c;来自浙江杭州的一位大学生小李同学&#xff0c;家境良好&#xff0c;平时学习刻苦&#xff0c;在即将毕业之际&#xff0c;准备给自己安排一个毕业旅行&#xff0c;同时帮助…

Java 高级应用-多线程-实现 Runnable 接口与继承 Thread 类

1.1 程序、进程与线程 • 程序&#xff08;program&#xff09;&#xff1a;为完成特定任务&#xff0c;用某种语言编写的一组指令的集合。即指一段 静态的代码&#xff0c;静态对象。 • 进程&#xff08;process&#xff09;&#xff1a;程序的一次执行过程&#xff0c;或是正…

转变范式:如何使用 5 种新模式重塑 2023 年的实体店体验

在电商盛行的当下&#xff0c;线上购物已成为新零售的重要组成部分&#xff0c;实体零售业正处于两难境地。一方面&#xff0c;实体零售是绝对有必要的&#xff1a;美国约 85% 的销售额来自实体商店。 另一方面&#xff0c;尽管增长放缓&#xff0c;但电商收入占销售总额的比例…

chatgpt赋能python:Python中图形怎么整体下移?

Python中图形怎么整体下移&#xff1f; 在Python中&#xff0c;我们常常需要处理各种各样的图形&#xff0c;但是有时候我们需要将图形进行整体调整&#xff0c;比如将所有图形下移一定距离。那么在Python中&#xff0c;我们该如何实现这个操作呢&#xff1f; 介绍 在Python…

【Linux】3、iptables

文章目录 一、设置其他机器均无法访问 a、b、c 机器的 5432 端口二、设置 d、e 可访问 a、b、c 的 5432 端口三、检查业务是否受到影响 iptables 可在 tcp 协议栈层面限制访问&#xff0c;常用于解决现场的各漏洞。 场景&#xff1a;现场有 a、b、c 三个机器组成的 postgres 集…

经纬恒润AUTOSAR成功适配智芯科技国产车规级芯片

近日&#xff0c;经纬恒润AUTOSAR基础软件产品INTEWORK-EAS-CP成功适配智芯半导体的Z20K14x产品家族。同时&#xff0c;经纬恒润完成了对智芯半导体Z20K14X 产品MCAL软件适配和工程集成&#xff0c;为智芯半导体提供了全套AUTOSAR解决方案。 左图&#xff1a;经纬恒润AUTOSAR E…

iOS 创建组件库

索引库 repo 索引文件(.podspec文件) 1.搭建私有库之前必须要先创建索引库 1&#xff09;首先检查当前电脑的索引库 pod repo 2&#xff09;在gitlab上创建一个新的库&#xff0c;这个库用来保存私有库的podspec文件&#xff0c;所以我们一般起名字最好是 xxxSpec用以区分…

回归预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计学习总结参考资料 预测效果 基本介…

在虚拟机上部署hadoop集群(全流程)

一、单节点部署前置准备 这里一直下一步就好了 接下来需要为该节点固定ip并配置相关网关还有dns解析 这里配置了一个本机dns解析,也配置了一个公网dns解析(主要目的还是为了固定ip

知识变现:知识付费产品,怎么定价?

知识变现&#xff1a;知识付费产品&#xff0c;怎么定价&#xff1f; 定价&#xff0c;是知识博主或者培训机构、用户、竞争对手间博弈平衡后的结果。 200元以下: 只有产品&#xff0c;没有服务。 产品的特征是标准化、大批量。这样的知识产品&#xff0c;要卖给几千、几万…

CSS 实现一个动态水形波浪蒙版层

需求的最终实现效果&#xff0c;如下图&#xff0c;在盒子表面&#xff0c;绘制一个波浪形状的蒙版层&#xff08;动态的&#xff09;。 先定义一个&#xff0c;主体盒子块&#xff0c;等会儿的蒙版图层会覆盖到它的上面。 <div></div>图层采用&#xff0c;SVG进…

Spring Boot 如何自定义异常处理器

Spring Boot自定义异常处理器 在Spring Boot应用程序中&#xff0c;异常处理是一个非常重要的方面。如果您不处理异常&#xff0c;应用程序可能会崩溃或出现不可预料的行为。默认情况下&#xff0c;Spring Boot将未捕获的异常返回给客户端。这通常不是期望的行为&#xff0c;因…

【Java基础】注解与反射

一、学习笔记 &#xff08;本文内容基本源自参考链接1视频教程&#xff09; 1、注解的含义 1&#xff09;注解&#xff08;annotation)是从jdk5.0开始引入的新技术&#xff0c;其作用&#xff1a;不是程序本身&#xff0c;可对程序作解释&#xff08;该作用与注释comment相同…

iOS 性能优化方案-弱网优化

一、iPhone手机弱网环境配置 选择现有网络状态 或自定义网络状态 设置参数: 每个参数的含义大致如下: in bandwidth &#xff1a;下行带宽 in packet loss &#xff1a;下行丢包率 in delay &#xff1a;下行延迟(ms) out bandwidth &#xff1a;上行带宽 out packet los…

【解决】升级g++到8版本

升级g到8版本 g不提高到最新版本在一些操作会头文件报错&#xff0c;因此下面我们配置g编译器 要升级g编译器到版本8&#xff0c;您可以尝试以下步骤&#xff1a; 添加Developer Toolset存储库&#xff1a;在CentOS上&#xff0c;可以使用Red Hat Developer Toolset存储库来获…

PMP课堂模拟题目及解析(第15期)

141. 在新项目的干系人会议中&#xff0c;项目经理发现一名干系人对项目有抵触。项目经理记录这个问题&#xff0c;并对该干系人的参与程度评级。项目经理使用了哪项工具或技术来为干系人的参与程度评级&#xff1f; A. 干系人参与评估矩阵 B. 风险概率和影响评估 C. 人际关…

文件夹显示无法访问、拒绝访问需要权限的解决方法

为了简便管理资料&#xff0c;我们都会选择在电脑上建立文件夹来保存不同作用的资料。文件夹显示无法访问、拒绝访问需要权限的解决方法但是当我们遇到某些文件夹打不开无法访问、拒绝访问时该怎么办呢&#xff1f;这里和大家讲一个方法来解决遇到文件夹无法访问、拒绝访问的这…

Seata1.6.1的安装部署

一、业务系统&#xff08;一个简单采购系统&#xff0c;模拟采购同时增加库存&#xff09; 项目地址&#xff1a;JAVA学习代码: java学习代码&#xff0c;包括一些练习用的开源项目 二、部署TC服务 1、部署Seata的tc-server 1.1、下载 下载地址&#xff1a;下载中心 (seata.…

Rust语言从入门到入坑——(1)初窥Rust,这是个什么鬼!

文章目录 0 引入1、特性2、应用3、总结 0 引入 最近新闻来说&#xff0c;windows部分核心使用Rust语言重写&#xff0c;linux支持rust语言&#xff0c;我就在想什么魔力让该语言如此受大家喜爱&#xff0c;晚上搜了一下&#xff0c;对该语言最大的感触就是&#xff1a;入门难&…

APACHE-ATLAS-2.1.0 - ATLAS的RESTAPI?(四)

查看接口 1. 官方DOC&#xff1a;https://atlas.apache.org/api/v2/index.html 2. 官方SWAGGER&#xff1a;https://atlas.apache.org/api/v2/ui/index.html#/ 接口说明 &#xff08;1&#xff09;管理接口 ①. 查看服务器的状态 http://192.168.64.174:21000/api/atla…