微信小程序中使用 內嵌 H5 時,登錄問題的處理方法


在微信小程序的開發中,經常遇到需要使用 <web-view></web-view> 內嵌 H5 的需求。在這種需求中比較棘手的問題應該就是登錄狀態的判斷了,小程序中的登錄狀態怎樣與H5中的登錄狀態保持一致?

一般來說,后端開發同事多數會要求我們在 H5 中的接口請求中攜帶 cookie,來獲取用戶當前的登錄狀態。這個該如何實現呢?

分為以下幾步:

1、小程序中,封裝統一的接口請求方法(以便在每個接口中都攜帶 cookie,放在 header 中);

const request = parameter => {
    //url必填項
    if (!parameter || parameter == {} || !parameter.url) {
        console.log('Data request can not be executed without URL.');
        return false;
    } else {
        var murl = parameter.url;
        var headerCookie = wx.getStorageSync('cookie');
        //判斷是否有獨自cookie請求
        var selfCookie = parameter.selfCookie;
        selfCookie && (headerCookie += selfCookie);
        wx.request({
            url: murl,
            data: parameter.data || {},
            header: {
                // 'Content-Type': 'application/x-www-form-urlencoded',
                'Cookie': headerCookie
            },
            method: parameter.method || 'POST',
            success: function(res) {
                parameter.success && parameter.success(res);

            },
            fail: function(e) {
                parameter.fail && parameter.fail(e);
                // console.log(e.errMsg);
                wx.showToast({
                    title: '網絡信號較差',
                    icon: 'loading',
                    duration: 3000
                });
            },
            complete: function() {
                parameter.complete && parameter.complete();
            }
        });
    }

}

 

2、小程序中,當用戶成功登錄之后,保存當前cookie;

utils.request({
  url: url,
   data: {},
   success: (res) => {
     wx.setStorageSync('cookie', res.header["Set-Cookie"]);
   }
});

3、在<web-view></web-view> 內嵌 H5 的頁面,獲取已保存的 cookie 值,使用 url 拼接的方式傳給 H5 頁面;

// <web-view> 頁面模板
<view> <web-view src="{{url}}" ></web-view> </view>

//cookie 處理

  let value = wx.getStorageSync('cookie'),cookie_vl;

  if (value) {
    cookie_vl= value.match(new RegExp("(^| )"+"jxi-m-sid"+"=([^;]*)(;|$)"))[2] ;
  }

  // 處理 url,拼接 cookie 值

  this.setData({
    url: `${this.data.url}?${cookie_vl}`
  });

4、在H5中的處理方法是: 獲取 cookie 值並寫入。

let cookie = window.location.href.split('?')[1];

document.cookie = `jxi-m-sid=${cookie};domain=${host};path=/`;

上述代碼中的 host 值得是 H5 鏈接中的域名。

這樣處理之后,接口發送請求時會攜帶該 cookie,后端同事獲取之后就可以判斷登錄狀態了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM