欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2019年05月22日 15:04:03   作者:華噠妹妹  
這篇文章主要介紹了小程序登錄態(tài)和檢驗(yàn)注冊(cè)過沒的app.js寫法, 本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的借鑒價(jià)值,需要的朋友可以參考下

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)返回來給小程序的對(duì)象格式為:

 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)是否過期,如果沒有過期就檢查用戶注冊(cè)沒注冊(cè)①,如果過期了就去重新執(zhí)行登錄流程②

(2)②的流程為:調(diào)用wx.login來獲取登錄憑證(code),然后把code發(fā)給后臺(tái),后臺(tái)調(diào)用 auth.code2Session,使用 code 換取 openid 等信息來獲取openId , 把openId返回給小程序, 然后把openId放到小程序緩存里面,然后檢查用戶注冊(cè)沒注冊(cè)①

(3)①的流程為:先從緩存查該用戶注冊(cè)沒注冊(cè)過(通過檢查緩存變量registered存不存在),有就是老用戶,沒有就去后臺(tái)通過openId查有沒有這個(gè)用戶,把結(jié)果返回給小程序,如果后臺(tái)有這個(gè)用戶,說明已經(jīng)注冊(cè)過,就把在緩存里加個(gè)registered并賦值true。

 (4)然后我們就可以在其他頁面通過registered來判斷用戶注冊(cè)沒注冊(cè)過,從而跳轉(zhuǎn)進(jìn)入注冊(cè)頁面或者是主頁

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)注冊(cè)過
   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)注冊(cè)過的】");
      console.log("【當(dāng)前用戶的openid為:】" + wx.getStorageSync('openid'));
     },
     fail(res) {
      var openid;
      openid = wx.getStorageSync('openid');
      wx.request({
       url: host + '寫自己的后臺(tái)請(qǐng)求檢查用戶存不存在的URL',
       method: 'POST',
       data: {
        openId: openid,
       },
       header: {
        "Content-Type": "application/x-www-form-urlencoded"
       },
       success: (res) => {
        if (后臺(tái)返回注冊(cè)過") {
         if (res.data.data) {
          console.log("【通過后臺(tái)查詢到該用戶已經(jīng)注冊(cè)過】");
          wx.setStorage({
           key: "registered",
           data: true
          });
         } else {
          console.log("【通過后臺(tái)查詢到該用戶還沒注冊(cè)過】");
         }
        }
       }
      })
     },
    })
   },
   //該函數(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ò)請(qǐng)求,發(fā)送 res.code 到后臺(tái)換取 openId
      if (res.code) {
       var code = res.code;
       wx.request({
        url: host + '寫自己后臺(tái)用code換取OpenId的請(qǐng)求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方法的請(qǐng)求
   * @param url 發(fā)送請(qǐng)求的URL
   * @param param 請(qǐng)求參數(shù),請(qǐng)求參數(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è)置通用的請(qǐng)求屬性
      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請(qǐng)求出現(xiàn)異?!?訪問URL:"+url+",錯(cuò)誤:"+e.getMessage());
    }
    // 使用finally塊來關(guān)閉輸入流
    finally {
      try {
        if (in != null) {
          in.close();
        }
      } catch (Exception e2) {
        System.out.println("【HTTP請(qǐng)求關(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無效】");
}

總結(jié)

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

相關(guān)文章

  • js實(shí)現(xiàn)類似新浪微博首頁內(nèi)容漸顯效果的方法

    js實(shí)現(xiàn)類似新浪微博首頁內(nèi)容漸顯效果的方法

    這篇文章主要介紹了js實(shí)現(xiàn)類似新浪微博首頁內(nèi)容漸顯效果的方法,實(shí)例分析了漸顯效果的實(shí)現(xiàn)要點(diǎn)與方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • js 自定義個(gè)性下拉選擇框示例

    js 自定義個(gè)性下拉選擇框示例

    下拉選擇框想必大家并不陌生,一邊情況下都是使用默認(rèn)的,為了打破傳統(tǒng),下面與大家分享下使用js自定義下拉選擇框示例代碼,感興趣的朋友可以參考下
    2013-08-08
  • 詳解JavaScript引擎V8執(zhí)行流程

    詳解JavaScript引擎V8執(zhí)行流程

    本文主要講解的是V8的技術(shù),是V8的入門篇,主要目的是了解V8的內(nèi)部機(jī)制,希望對(duì)前端,快應(yīng)用,瀏覽器,以及nodejs同學(xué)有些幫助。這里不涉及到如何編寫優(yōu)秀的前端,只是對(duì)JS內(nèi)部引擎技術(shù)的講解
    2021-06-06
  • js url傳值中文亂碼之解決之道

    js url傳值中文亂碼之解決之道

    因?yàn)閖s url在傳值的過程中使用的是js自己默認(rèn)的字符集編碼規(guī)則,我們必須把它轉(zhuǎn)成屬于我們自己的編碼規(guī)格
    2009-11-11
  • 詳解微信小程序文件下載--視頻和圖片

    詳解微信小程序文件下載--視頻和圖片

    這篇文章主要介紹了微信小程序文件下載視頻和圖片,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • javascript實(shí)現(xiàn)簡單的全選和反選功能

    javascript實(shí)現(xiàn)簡單的全選和反選功能

    這篇文章主要介紹了javascript實(shí)現(xiàn)簡單的全選和反選功能的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • JavaScript導(dǎo)出Excel實(shí)例詳解

    JavaScript導(dǎo)出Excel實(shí)例詳解

    這篇文章主要介紹了JavaScript導(dǎo)出Excel的方法,以實(shí)例形式詳細(xì)分析了javascript將WEB頁面導(dǎo)出為EXCEL文檔的方法及相關(guān)的技巧說明,對(duì)于深入了解javascript編程原理有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • Add a Table to a Word Document

    Add a Table to a Word Document

    Add a Table to a Word Document...
    2007-06-06
  • js正則匹配出所有圖片及圖片地址src的方法

    js正則匹配出所有圖片及圖片地址src的方法

    這篇文章主要介紹了js正則匹配出所有圖片及圖片地址src的方法,涉及javascript正則匹配及頁面元素操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • BootstrapTable refresh 方法使用實(shí)例簡單介紹

    BootstrapTable refresh 方法使用實(shí)例簡單介紹

    本文就bootstrapTable refresh 方法如何傳遞參數(shù)做簡單舉例說明,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-02-02

最新評(píng)論