Taro -- 微信小程序登录
Taro微信小程序登录
1.调用Taro.login()获取登录凭证code;
2.调用Taro.request()将code传到服务器;
3.服务器端调用微信登录校验接口(appid+appsecret+code),获得session_key+openid;
2.调用Taro.request()将code传到服务器;
3.服务器端调用微信登录校验接口(appid+appsecret+code),获得session_key+openid;
4.服务器端生成AUTH_TICKET(相当于userId),使用AUTH_TICKET为key,session_key+openid为value的形式存在服务器,并将AUTH_TICKET传送给客户端;
5.客户端本地存储AUTH_TICKET,登录成功!
6.下次登录时可以用AUTH_TICKET传输到服务器端验证登录态是否过期,未过期则登录成功。
小程序API中Taro.checkSession()可以校验用户当前session_key是否有效。
//检测sessionkey Taro.checkSession({ success: function() { //console.log("session_key 未过期") //session_key 未过期,并且在本生命周期一直有效 }, fail: function() { // session_key 已经失效,需要重新执行登录流程 // 登录 this.gotologin() } })
登录的代码:
gotologin = () => { var that = this //清除缓存 Taro.clearStorageSync() // 登录 Taro.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId if (res.code) { //发起网络请求 Taro.request({ url: that.globalData.path + '/miniLogin/login.ajax', data: { code: res.code }, success: res => { let mylogininfo = res.data.data if (mylogininfo != null) { Taro.setStorageSync('logininfo', mylogininfo) console.log(mylogininfo) //登录验证 拿openid换AUTH_TICKET Taro.request({ method: 'post', url: that.globalData.path + '/miniLogin/loginCheck.ajax', header: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: { openid: mylogininfo.openid, unionid: mylogininfo.unionid ? mylogininfo.unionid : '', phoneNo: '' }, success: res => { let mdata = res.data if (mdata.code == 200) { Taro.showToast({ title: '登录成功', icon: 'success', duration: 2000 }) // 存储AUTH_TICKET Taro.setStorageSync( 'AUTH_TICKET', mdata.data.AUTH_TICKET ) // 携带AUTH_TICKET请求接口,获取数据 Taro.request({ method: 'post', url: that.globalData.path + '/comLogin/statffCompany.ajax', header: { 'Content-Type': 'application/x-www-form-urlencoded', 'weixinauth': mdata.data.AUTH_TICKET }, success: function(res) { console.log(res) } }) } else if (mdata.code == 400) { //此ID未绑定 //获取手机号码绑定 } } }) } else { console.log(res.data) } } }) } else { console.log('登录失败!' + res.errMsg) } } }) }