理清小程序完整的微信登录过程
目录
一、小程序登录
小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。
1.1.登录流程时序
说明:
- 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
- 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
注意:会话密钥 session_key
是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
二、名词解释
code 登录凭证,一次性且时效5分钟
session_key 会话密钥 微信是不会把有效期告知开发者的,它会根据用户使用小程序的行为对session_key 进行续期。如果用户频繁使用,则有效期更长。
openId 当前用户在我们微信小程序的中的唯一标识,永远不变
unionId 当前用户在同一个微信开发平台账号的下的唯一标识(微信公众号、小程序、移动应用等)
appId 小程序唯一标识
appSecret 当前小程序的app secret 可以与code ,appId去换取session_key
三、流程详细说明
其实根据以上信息我们就已经可以清楚的了解整个实现的流程了。现在我们来梳理一下。一共可分为3个步骤:
- 步骤1:前端调用wx.login()获取登录凭证 ,拿到res.code
- 步骤2:前端发送 res.code 到后台换取 openId, sessionKey, unionId 。后台需提供接口。
- 步骤3:前端存登陆状态 存入缓存中,openid ,session_key
示例代码:
/**
作者:丸子
描述:选择登录模式授权动作,用于获取unionid
*/
// 步骤1:wx.login()
wx.login({
success: function(res) {
// console.log(res);
if (res.code) {
var code = res.code;
// 步骤2 发送 res.code 到后台换取 openId, sessionKey, unionId 自己调用后端写的方法
getUnionId(res.code)...........
//成功后:
var openID = '';
if (response.custom.unionid) {
openID = response.custom.unionid;
} else {
openID = response.custom.openid;
};
// console.log(openID)
// 步骤3 存登陆状态 存入缓存中,方便二次打开使用
wx.setStorage({
key: 'openID',
data: openID
})
wx.setStorage({
key: 'sessionkey',
data: response.custom.sessionkey
});
} else {
console.log('登录失败!' + res.errMsg);
};
}
});
建议可以自己单独封装起来。
欢迎留言交流,有错误之处请指出。