中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序登錄態和檢驗注冊過沒的app.js如何實現

發布時間:2021-09-10 13:41:42 來源:億速云 閱讀:209 作者:小新 欄目:web開發

小編給大家分享一下微信小程序登錄態和檢驗注冊過沒的app.js如何實現,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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();
        }
       })
      }
     }
    })
   },
 },
})

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;
  }
 /**
   * 從規范上,建議把這個方法抽出來放到HttpUtil類里面
   * 向指定URL發送GET方法的請求
   * @param url 發送請求的URL
   * @param param 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。
   * @return URL 所代表遠程資源的響應結果
   */
  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();
      // 設置通用的請求屬性
      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的響應
      in = new BufferedReader(new InputStreamReader(
          connection.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("【HTTP發送GET請求出現異常】:訪問URL:"+url+",錯誤:"+e.getMessage());
    }
    // 使用finally塊來關閉輸入流
    finally {
      try {
        if (in != null) {
          in.close();
        }
      } catch (Exception e2) {
        System.out.println("【HTTP請求關閉輸入流異常】:訪問URL:"+url+",錯誤:"+e2.getMessage());
      }
    }
    return result;
  }
}

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

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

以上是“微信小程序登錄態和檢驗注冊過沒的app.js如何實現”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武山县| 和林格尔县| 大悟县| 云阳县| 德庆县| 华容县| 乐清市| 友谊县| 藁城市| 安康市| 灌云县| 家居| 师宗县| 伊金霍洛旗| 尼勒克县| 华蓥市| 同江市| 乐山市| 普洱| 定州市| 霍邱县| 汕尾市| 嘉义市| 藁城市| 莱阳市| 石门县| 河源市| 舒城县| 诸暨市| 土默特左旗| 莱州市| 库伦旗| 南皮县| 花莲县| 铜梁县| 彭泽县| 平罗县| 洪江市| 秀山| 公安县| 香格里拉县|