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) } } }) }