0、可參考的官方頁面
獲取登錄憑證:https://developers.weixin.qq.com/miniprogram/dev/api/wx.login.html
檢查登錄態是否過期: https://developers.weixin.qq.com/miniprogram/dev/api/wx.checkSession.html
備注:你要明白什么是登錄態:這里的登錄態是微信小程序自己的登錄態,我們可以再自己寫個登錄頁面作為自己的登錄態,不過為了用戶體驗良好我直接以微信登錄態做為自己的登錄態。所以我的整個小程序是直接自動登錄的
注意:微信小程序緩存很容易被清除,所以你必須時刻提防小程序緩存被清除的狀態下怎么處理。
備注:我從后臺返回來給小程序的對象格式為:
public ResultCode resultCode; // 業務響應碼 public String resultMsg = ""; // 返回信息描述 public String errCode; // 錯誤代碼 public String errCodeDes = ""; // 錯誤描述 public Object data; // 返回業務數據 public enum ResultCode { SUCCESS, // 業務處理成功 FAIL; // 業務處理失敗 }1、流程
(1)調用wx.checkSession檢查用戶登錄態是否過期,如果沒有過期就檢查用戶注冊沒注冊①,如果過期了就去重新執行登錄流程②
(2)②的流程為:調用wx.login來獲取登錄憑證(code),然后把code發給后臺,后臺調用 auth.code2Session,使用 code 換取 openid 等信息來獲取openId , 把openId返回給小程序, 然后把openId放到小程序緩存里面,然后檢查用戶注冊沒注冊①
(3)①的流程為:先從緩存查該用戶注冊沒注冊過(通過檢查緩存變量registered存不存在),有就是老用戶,沒有就去后臺通過openId查有沒有這個用戶,把結果返回給小程序,如果后臺有這個用戶,說明已經注冊過,就把在緩存里加個registered并賦值true。
(4)然后我們就可以在其他頁面通過registered來判斷用戶注冊沒注冊過,從而跳轉進入注冊頁面或者是主頁
2、app.js代碼
App({ globalData: { serverHost: 'http://localhost:8080', //服務器域名 }, onLaunch: function() { var that = this; //檢查登錄態是否過期 wx.checkSession({ success() { // session_key 未過期,并且在本生命周期一直有效 console.log("【用戶小程序登錄態未過期】"); that.isRegister(); }, fail() { // session_key 已經失效,需要重新執行登錄流程 that.wxLogin(); } }) }, //查看當前用戶是否已經注冊過 isRegister: function() { var that = this; var host = this.globalData.serverHost; // (先從緩存查該用戶,有就是老用戶,沒有就后臺查有沒有這個用戶,后臺查到有這個用戶就放緩存,沒有就是新用戶) wx.getStorage({ key: 'registered', success(res) { console.log("【通過緩存查詢到該用戶是已經注冊過的】"); console.log("【當前用戶的openid為:】" + wx.getStorageSync('openid')); }, fail(res) { var openid; openid = wx.getStorageSync('openid'); wx.request({ url: host + '寫自己的后臺請求檢查用戶存不存在的URL', method: 'POST', data: { openId: openid, }, header: { "Content-Type": "application/x-www-form-urlencoded" }, success: (res) => { if (后臺返回注冊過") { if (res.data.data) { console.log("【通過后臺查詢到該用戶已經注冊過】"); wx.setStorage({ key: "registered", data: true }); } else { console.log("【通過后臺查詢到該用戶還沒注冊過】"); } } } }) }, }) }, //該函數用來登錄的 wxLogin: function() { var that = this; //設置后臺host var host = this.globalData.serverHost; console.log("【用戶重新執行小程序登錄流程】"); wx.login({ success(res) { // 發起網絡請求,發送 res.code 到后臺換取 openId if (res.code) { var code = res.code; wx.request({ url: host + '寫自己后臺用code換取OpenId的請求URL', method: 'POST', data: { code: code, }, header: { "Content-Type": "application/x-www-form-urlencoded" }, success: (res) => { console.log("【獲取用戶openid成功】"); console.log("【從后臺獲取到用戶openid為】" + res.data.data.openid) let openId = res.data.data.openid; wx.setStorage({ key: "openid", data: res.data.data.openid }); console.log("【用戶openid放入緩存成功】"); that.isRegister(); } }) } } }) }, },})
新聞熱點
疑難解答