小編給大家分享一下微信小程序登錄態(tài)和檢驗(yàn)注冊過沒的app.js如何實(shí)現(xiàn),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、思禮網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
0、可參考的官方頁面
獲取登錄憑證:https://developers.weixin.qq.com/miniprogram/dev/api/wx.login.html
檢查登錄態(tài)是否過期: https://developers.weixin.qq.com/miniprogram/dev/api/wx.checkSession.html
備注:你要明白什么是登錄態(tài):這里的登錄態(tài)是微信小程序自己的登錄態(tài),我們可以再自己寫個(gè)登錄頁面作為自己的登錄態(tài),不過為了用戶體驗(yàn)良好我直接以微信登錄態(tài)做為自己的登錄態(tài)。所以我的整個(gè)小程序是直接自動(dòng)登錄的
注意:微信小程序緩存很容易被清除,所以你必須時(shí)刻提防小程序緩存被清除的狀態(tài)下怎么處理。
備注:我從后臺(tái)返回來給小程序的對象格式為:
public ResultCode resultCode; // 業(yè)務(wù)響應(yīng)碼 public String resultMsg = ""; // 返回信息描述 public String errCode; // 錯(cuò)誤代碼 public String errCodeDes = ""; // 錯(cuò)誤描述 public Object data; // 返回業(yè)務(wù)數(shù)據(jù) public enum ResultCode { SUCCESS, // 業(yè)務(wù)處理成功 FAIL; // 業(yè)務(wù)處理失敗 }
1、流程
(1)調(diào)用wx.checkSession檢查用戶登錄態(tài)是否過期,如果沒有過期就檢查用戶注冊沒注冊①,如果過期了就去重新執(zhí)行登錄流程②
(2)②的流程為:調(diào)用wx.login來獲取登錄憑證(code),然后把code發(fā)給后臺(tái),后臺(tái)調(diào)用 auth.code2Session,使用 code 換取 openid 等信息來獲取openId , 把openId返回給小程序, 然后把openId放到小程序緩存里面,然后檢查用戶注冊沒注冊①
(3)①的流程為:先從緩存查該用戶注冊沒注冊過(通過檢查緩存變量registered存不存在),有就是老用戶,沒有就去后臺(tái)通過openId查有沒有這個(gè)用戶,把結(jié)果返回給小程序,如果后臺(tái)有這個(gè)用戶,說明已經(jīng)注冊過,就把在緩存里加個(gè)registered并賦值true。
(4)然后我們就可以在其他頁面通過registered來判斷用戶注冊沒注冊過,從而跳轉(zhuǎn)進(jìn)入注冊頁面或者是主頁
2、app.js代碼
App({ globalData: { serverHost: 'http://localhost:8080', //服務(wù)器域名 }, onLaunch: function() { var that = this; //檢查登錄態(tài)是否過期 wx.checkSession({ success() { // session_key 未過期,并且在本生命周期一直有效 console.log("【用戶小程序登錄態(tài)未過期】"); that.isRegister(); }, fail() { // session_key 已經(jīng)失效,需要重新執(zhí)行登錄流程 that.wxLogin(); } }) }, //查看當(dāng)前用戶是否已經(jīng)注冊過 isRegister: function() { var that = this; var host = this.globalData.serverHost; // (先從緩存查該用戶,有就是老用戶,沒有就后臺(tái)查有沒有這個(gè)用戶,后臺(tái)查到有這個(gè)用戶就放緩存,沒有就是新用戶) wx.getStorage({ key: 'registered', success(res) { console.log("【通過緩存查詢到該用戶是已經(jīng)注冊過的】"); console.log("【當(dāng)前用戶的openid為:】" + wx.getStorageSync('openid')); }, fail(res) { var openid; openid = wx.getStorageSync('openid'); wx.request({ url: host + '寫自己的后臺(tái)請求檢查用戶存不存在的URL', method: 'POST', data: { openId: openid, }, header: { "Content-Type": "application/x-www-form-urlencoded" }, success: (res) => { if (后臺(tái)返回注冊過") { if (res.data.data) { console.log("【通過后臺(tái)查詢到該用戶已經(jīng)注冊過】"); wx.setStorage({ key: "registered", data: true }); } else { console.log("【通過后臺(tái)查詢到該用戶還沒注冊過】"); } } } }) }, }) }, //該函數(shù)用來登錄的 wxLogin: function() { var that = this; //設(shè)置后臺(tái)host var host = this.globalData.serverHost; console.log("【用戶重新執(zhí)行小程序登錄流程】"); wx.login({ success(res) { // 發(fā)起網(wǎng)絡(luò)請求,發(fā)送 res.code 到后臺(tái)換取 openId if (res.code) { var code = res.code; wx.request({ url: host + '寫自己后臺(tái)用code換取OpenId的請求URL', method: 'POST', data: { code: code, }, header: { "Content-Type": "application/x-www-form-urlencoded" }, success: (res) => { console.log("【獲取用戶openid成功】"); console.log("【從后臺(tái)獲取到用戶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(); } }) } } }) }, }, })
3、java后臺(tái)怎么通過code獲取openId
import net.sf.json.JSONObject; /** * @author niqinhua * @date 2019/3/8 9:19 */ public class WXUtil { public static JSONObject getOpenidAndSessionKey(String code) { String url = "https://api.weixin.qq.com/sns/jscode2session"; String param = "appid=寫自己的appId&secret=寫自己的密鑰&js_code=" + code + "&grant_type=authorization_code"; String wxReturnResult = sendGet(url, param); JSONObject wxReturnResultObject = JSONObject.fromObject(wxReturnResult); return wxReturnResultObject; } /** * 從規(guī)范上,建議把這個(gè)方法抽出來放到HttpUtil類里面 * 向指定URL發(fā)送GET方法的請求 * @param url 發(fā)送請求的URL * @param param 請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。 * @return URL 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打開和URL之間的連接 URLConnection connection = realUrl.openConnection(); // 設(shè)置通用的請求屬性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立實(shí)際的連接 connection.connect(); // 定義 BufferedReader輸入流來讀取URL的響應(yīng) in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("【HTTP發(fā)送GET請求出現(xiàn)異?!?訪問URL:"+url+",錯(cuò)誤:"+e.getMessage()); } // 使用finally塊來關(guān)閉輸入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { System.out.println("【HTTP請求關(guān)閉輸入流異?!?訪問URL:"+url+",錯(cuò)誤:"+e2.getMessage()); } } return result; } }
上面只是工具類直接拿就行,真正業(yè)務(wù)邏輯要自己寫,我只給出重點(diǎn)部分
JSONObject wxReturnJson = WXUtil.getOpenidAndSessionKey(code); if (wxReturnJson.get("errCode")!=null) { //log.error("【獲取用戶的openid】【失敗】【傳遞參數(shù)code無效】"); } else { //log.info("【獲取用戶的openid】【成功】【傳遞參數(shù)code無效】"); }
以上是“微信小程序登錄態(tài)和檢驗(yàn)注冊過沒的app.js如何實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標(biāo)題:微信小程序登錄態(tài)和檢驗(yàn)注冊過沒的app.js如何實(shí)現(xiàn)
瀏覽路徑:http://muchs.cn/article44/ijoche.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站改版、微信小程序、做網(wǎng)站、定制網(wǎng)站、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)