开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步。这篇文章将介绍 python + flask + 微信小程序实现用户快速注册登录方案(本文主要进行后端逻辑的梳理,小程序端逻辑只写了必要的部分,如有需要,请点击连接阅读官方开发文档)
官方给出的微信小程序登录时序图如下:
这个流程分为两大部分:
小程序使用 wx.login() API 获取 code,并由开发者后端服务器换取open_id 和 session_key,小程序使用 wx.getUserInfo() API 获取 encryptedData 和 iv,然后将这三个信息发送给开发者服务器服务器。
开发者服务器获取到 code、encryptedData和 iv 后,将 session_key 利用 encryptedData 和 iv 解密,在服务端获取用户信息。根据用户信息返回 jwt 数据,完成登录状态。
小程序登录流程梳理
1 小程序端调用wx.login
小程序通过
返回值
属性
类型
说明
code
String
用户允许登录后,回调内容会带上 code(有效期五分钟)
2 判断用户是否授权
小程序端可以通过 wx.getSetting 接口获取用户当前的授权状态
如果用户已经授权,则直接发起登录请求
如果用户没有授权,则调用 wx.authorize 或 引导用户关注公众号 来获得授权。
如果用户不予授权,则登录失败。
3 小程序端访问 wx.getUserInfo
小程序端调用
接口success 时返回参数如下:
参数名
类型
说明
userInfo
OBJECT
用户信息对象,不包含 openid 等敏感信息。
rawData
String
不包括敏感信息的原始数据字符串,用于计算签名。
signature
String
使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息
encryptedData
String
包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法
iv
String
加密算法的初始向量,详细见加密数据解密算法
将这些第一步获得的js_code和这里获得的 rawData, signature, encryptedData, iv一起打包传入开发者后端。
4 开发者服务器访问co