国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 課堂 > 小程序 > 正文

微信小程序登錄態(tài)和檢驗注冊過沒的app.js寫法

2020-03-21 15:55:31
字體:
供稿:網(wǎng)友

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),我們可以再自己寫個登錄頁面作為自己的登錄態(tài),不過為了用戶體驗良好我直接以微信登錄態(tài)做為自己的登錄態(tài)。所以我的整個小程序是直接自動登錄的

 注意:微信小程序緩存很容易被清除,所以你必須時刻提防小程序緩存被清除的狀態(tài)下怎么處理。

備注:我從后臺返回來給小程序的對象格式為:

 public ResultCode resultCode; // 業(yè)務(wù)響應(yīng)碼 public String resultMsg = ""; // 返回信息描述 public String errCode; // 錯誤代碼 public String errCodeDes = ""; // 錯誤描述 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ā)給后臺,后臺調(diào)用 auth.code2Session,使用 code 換取 openid 等信息來獲取openId , 把openId返回給小程序, 然后把openId放到小程序緩存里面,然后檢查用戶注冊沒注冊①

(3)①的流程為:先從緩存查該用戶注冊沒注冊過(通過檢查緩存變量registered存不存在),有就是老用戶,沒有就去后臺通過openId查有沒有這個用戶,把結(jié)果返回給小程序,如果后臺有這個用戶,說明已經(jīng)注冊過,就把在緩存里加個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;    // (先從緩存查該用戶,有就是老用戶,沒有就后臺查有沒有這個用戶,后臺查到有這個用戶就放緩存,沒有就是新用戶)    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 + '寫自己的后臺請求檢查用戶存不存在的URL',       method: 'POST',       data: {        openId: openid,       },       header: {        "Content-Type": "application/x-www-form-urlencoded"       },       success: (res) => {        if (后臺返回注冊過") {         if (res.data.data) {          console.log("【通過后臺查詢到該用戶已經(jīng)注冊過】");          wx.setStorage({           key: "registered",           data: true          });         } else {          console.log("【通過后臺查詢到該用戶還沒注冊過】");         }        }       }      })     },    })   },   //該函數(shù)用來登錄的   wxLogin: function() {    var that = this;    //設(shè)置后臺host    var host = this.globalData.serverHost;    console.log("【用戶重新執(zhí)行小程序登錄流程】");    wx.login({     success(res) {      // 發(fā)起網(wǎng)絡(luò)請求,發(fā)送 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();        }       })      }     }    })   }, },})

3、java后臺怎么通過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ī)范上,建議把這個方法抽出來放到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)");      // 建立實際的連接      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+",錯誤:"+e.getMessage());    }    // 使用finally塊來關(guān)閉輸入流    finally {      try {        if (in != null) {          in.close();        }      } catch (Exception e2) {        System.out.println("【HTTP請求關(guān)閉輸入流異?!?訪問URL:"+url+",錯誤:"+e2.getMessage());      }    }    return result;  }}

上面只是工具類直接拿就行,真正業(yè)務(wù)邏輯要自己寫,我只給出重點部分

JSONObject wxReturnJson = WXUtil.getOpenidAndSessionKey(code);if (wxReturnJson.get("errCode")!=null) {  //log.error("【獲取用戶的openid】【失敗】【傳遞參數(shù)code無效】");} else {  //log.info("【獲取用戶的openid】【成功】【傳遞參數(shù)code無效】");}

總結(jié)

以上所述是小編給大家介紹的微信小程序登錄態(tài)和檢驗注冊過沒的app.js寫法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 荔波县| 河东区| 鹰潭市| 叶城县| 翁牛特旗| 天峻县| 万州区| 靖州| 江永县| 东城区| 衡阳县| 祥云县| 崇文区| 三河市| 都江堰市| 德令哈市| 淄博市| 长春市| 德保县| 灌南县| 扶风县| 潞城市| 靖州| 昌黎县| 上虞市| 美姑县| 宜丰县| 从化市| 凤凰县| 珠海市| 长春市| 高阳县| 积石山| 北流市| 嘉善县| 昭觉县| 东乌珠穆沁旗| 渑池县| 乐都县| 靖州| 汶川县|