微信小程序の登录流程
登录流程
小程序端:
(1) 在小程序通过wx.login API获取临时的code
(2) 调用接口将code传递给自己的服务器
自己服务器端:
(1) 获取小程序内传来的临时的code
(2) 将临时的code + appId + appsecret发送给微信小程序服务器,获取 openId 和 session_key [这个时候用户不知道自己已经登录成功]
(3) 自己服务器内将 openId和session_key 组合生成有期限的token,返回给小程序端
小程序端:
(1) 获取自己服务器端内传递的token,并存储到storeage中
(2) 将需要记录用户操作的接口中携带这个token发送给自己的服务器端
自己服务器端:
(1) 将接口传递的token进行解析,解析出openId和session_key,将操作保存在数据库内,避免向微信服务器多次请求获取openId
如果用户更换手机?
(1) 判断storage中是否存储了token,如果未存储则重复登录流程
(2) 如果存储了token,判断是否已经过期,如果过期了则重新登录,如果没有过期,继续判断session_key是否过期,如果没有过期,则继续使用这个token进行用户校验,反之则重新登录
判断session_key是否过期:
wx.checkSession({
success: (res) => {
resolve(true)
},
fail: () => {
reject(false)
}
})
}
- 什么是openId?
openId 用户身份的唯一标识,用openId去识别用户 [unionId用于第三方登录]
- 什么是unionId?
unionId也是唯一的标识,用于多平台(APP,公众号,网页)授权时进行标识识别,多个产品源进行数据共享
多平台共享时需要同时绑定手机号(常用),因为可能某个平台不支持微信的登录,需要通过其它的方式进行信息绑定(最多的就是手机号)
所以有些客户端在要求你微信登录之后需要绑定手机号
注意: 服务器端openID和unionID都是可以获取的,如果涉及到多端的数据共享,建议直接使用unionID进行校验
获取用户信息
- 使用getUserProfile API
wx.getUserProfile({ desc: 'desc', // 必填 success:(res)=>{ console.log(res); // 成功回调 }, fail:()=>{} })
值得注意:
不允许直接在生命周期方法里获取用户信息,只能通过事件触发获取
示例:
// 这里加不加open-type 也可以 <button bindtap="getUserProfile" open-type="getUserInfo"></button> getUserProfile(){ wx.getUserProfile({ desc: '你好', // 必填 success:(userInfo)=>{ // 这里获取用户信息 console.log(userInfo); }, fail:()=>{} }) }
获取手机号
- 获取手机号
<button open-type="getPhoneNumber">获取手机号</button>
值得注意:
目前不能直接获取手机号,再调用这个button按钮时会传递一个code,将code传递给自己服务器端的一个接口,接口内部再访问微信的服务器,通过这个code获取手机号码信息
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!