微信小程序的登陆流程详解

简介: 原文:微信小程序的登陆流程详解小程序登陆和登陆状态维护 1.客户端调用 wx.login() ,获得返回参数 code 2.客户端调用 wx.request() 将 code 发送到服务器 3.
原文: 微信小程序的登陆流程详解

小程序登陆和登陆状态维护

1.客户端调用 wx.login() ,获得返回参数 code

2.客户端调用 wx.request() 将 code 发送到服务器

3.服务器将 code 和存储在服务器的 appid 和 appSecret 共三个参数作为请求参数加入URL,向下面的微信服务器接口发起请求:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

服务器会获得返回参数 openid 和 session_key 。这两个数据主要用在支付,数据签名,数据解密等与用户登陆态和标识有关的逻辑中。

openid是用户唯一标识,但不建议直接用做后端服务器的各用户标示符。

session_key 是针对用户数据进行加密签名的密匙。session_key在文件校验,获取用户具体信息时均需使用

一般为了安全起见,这两个数据都不会发往客户端。

4.服务器应使用 openid 和 session_key 生成 3rd_session ,作为服务器派发给用户的登陆态标识token,用于用户的权限和数据管理。将其发送到小程序客户端。

5.小程序客户端将 3rd_session 存入 storage中。

6.后续用户进入小程序时,首先调用 wx.checkSession() 检测登陆态,如果失败,重新发起登陆流程。

ps.微信文档中说明使用 wx.checkSession() 来进行用户登陆态的时间管理,使开发者无需再开发用户登陆态时间管理逻辑,但实际开发中,wx.checkSession存在延迟,导致用户刚进入小程序时比较卡,所以建议开发者仍然自己去处理用户的登陆态过期时间管理,根据用户的token来使用相关逻辑进行处理。

7.如果检测用户登陆状态未失效,则从 storage 中读取 3rd_session。在需要用户标识的 wx.request() 时作为用户标识发送到服务器检验,服务器判断其是否合法。

ps.在生成 3rd_session 时,将 3rd_session 作为键,将 session_key + openid 作为值,存储在 服务器的 session 存储或数据库中。每个3rd_session都需要设置一个失效时间用来进行用户登陆态管理。

获取用户信息

微信官方禁止无必要的获取用户信息,尤其是在用户刚进入小程序时。开发者最好在需要时再调用接口获取用户信息,保证小程序的审核通过。

获取用户信息主要有以下要点:

根据微信请求用户信息接口wx.getUserinfo()函数的请求参数withCredentials的布尔值及用户的登陆状态不同,会有不同的返回值。

1.当withCredentials 为 true 且 用户登陆态未到期

返回的数据会包括 encryptedData,iv等敏感数据。

请求用户信息返回数据项如下:

  1. userinfo 不包含敏感数据的用户信息
  2. rawData 不包含敏感数据的原始数据字符串,用于签名校验
  3. signature。 使用sha1( rawData + sessionkey ) 得到的字符串,用于签名校验数据
  4. encryptedData 包含 openId,unionId 等用户敏感数据的加密数据
  5. iv 加密算法的初始向量

2.当withCredentials 为 false 时

不要求登陆状态,返回数据不包含敏感数据,只包含用户的基本信息 userinfo 和 校验数据的rowData。


小程序的数据签名校验和数据解密

顺便提一下小程序的签名校验和数据解密

签名校验(用于校验数据完整性等):

需要使用session_key。客户端将 signature 和 rawData 发送到服务器,服务器通过相同的 sha1( rewData + session_key) 算法计算出 signature2,并与客户端发送过来的signature对比,校验数据完整性。


加密数据encryptedData的解密:

需要客户端将接口返回的encryptedData发送到服务器,服务器使用 appId 和 session_key ,根据加密算法的初始向量 iv 对 encryptedData 进行解密(微信提供有后端解密代码,包括python,php等(无java)

目录
相关文章
|
2月前
|
小程序 前端开发 测试技术
微信小程序的开发完整流程是什么?
微信小程序的开发完整流程是什么?
155 7
|
2月前
|
人工智能 弹性计算 搜索推荐
打造个性化的微信公众号AI小助手:从人设到工作流程
在数字化时代,一个有个性且功能强大的AI小助手能显著提升用户体验。本文档指导如何在微信公众号上设置AI小助手“小智”,涵盖其人设、功能规划及工作流程设计,旨在打造一个既智能又具吸引力的AI伙伴。
98 0
|
1月前
|
小程序 前端开发 算法
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的销售项目流程化管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的销售项目流程化管理系统附带文章源码部署视频讲解等
71 3
|
1月前
|
Java API 开发者
Java如何实现企业微信审批流程
大家好,我是V哥。本文分享如何在企业微信中实现审批流程,通过调用企业微信的开放API完成。主要内容包括获取Access Token、创建审批模板、发起审批流程和查询审批结果。提供了一个Java示例代码,帮助开发者快速上手。希望对你有帮助,关注V哥爱编程,编码路上同行。
|
2月前
|
机器学习/深度学习 人工智能 小程序
【一步步开发AI运动小程序】三、运动识别处理流程
随着人工智能技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等AI运动APP备受关注。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。文章介绍了视频帧、帧率FPS、抽帧和人体识别等基本概念,并详细说明了处理流程,包括抽帧、人体识别检测、骨骼图绘制和运动分析等步骤。下篇将介绍如何在小程序中实现抽帧。
|
2月前
|
小程序
微信小程序的注册流程
微信小程序的注册流程
103 0
|
4月前
|
小程序 前端开发 持续交付
小程序全栈开发中的CI/CD流程与自动化部署是一种高效的开发模式。
本文探讨小程序全栈开发中的CI/CD流程与自动化部署,介绍持续集成与部署的概念,包括自动化构建、测试、代码审查及部署实践。通过提高代码质量、迭代速度及团队协作效率,确保小程序稳定运行与良好用户体验。
97 2
|
4月前
|
前端开发 JavaScript API
微信公众号项目,实现微信支付(具体流程和参数)
微信公众号项目,实现微信支付(具体流程和参数)
|
5月前
|
小程序 开发工具 开发者
知识付费教育小程序搭建的流程及技术要点
【知识付费教育小程序】兴起于知识经济时代,旨在提供高质量知识服务。开发涉及定位受众、技术选型(如微信小程序)、功能设计(课程展示、购买、进度跟踪)、内容更新及用户体验优化。推广与运营,包括社交媒体宣传、会员体系构建、积分激励及持续优化,确保用户增长与留存。

热门文章

最新文章