最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序如何處理token過期問題

 更新時間:2021年10月22日 10:44:05   作者:ArmstrongZ  
最近再做個項目,需要檢查token過期,跳轉(zhuǎn)到登錄頁面,要求用戶重新登錄,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

先說結(jié)論

業(yè)務(wù)流程:  從網(wǎng)絡(luò)日志中檢查到token過期,則跳轉(zhuǎn)到登錄頁面,要求用戶重新登錄。

代碼邏輯:使用自定義的HttpUtil封裝wx.request API,全局捕獲過期token并自動處理后,下發(fā)給上層業(yè)務(wù)。

問題

Token過期的現(xiàn)象:

在網(wǎng)絡(luò)請求中,客戶端token會過段時間過期,使得后續(xù)的網(wǎng)絡(luò)請求失敗,拋出異常日志如下:

data: {code: "99997", date: 1634174831325, message: "TOKEN EXPIRED", status: "ERROR"}

小程序提供的API: wx.request 是非常簡單,只能在請求響應(yīng)成功后的回調(diào)函數(shù)中開發(fā)者自己去檢查token過期,常規(guī)的做法:

1.定義檢查token過期的方法:

function checkAuth(resp) {
  if(resp.data.code == '99997') { //我們服務(wù)器返回的token過期的code是99997,code可以和后臺自定義。
    wx.navigateTo({
      url: '/pages/login/login', //這里跳轉(zhuǎn)到登錄頁,要求用戶重新登錄
    })
    console.log("需要重新登錄......");
  }
}

2.在每個請求接口的響應(yīng)中,調(diào)用checkAuth(res)去捕獲token過期。

問題代碼

function createMatchImage(data, fun) {
  //console.log(getApp())
  console.log("token = " + getApp().getToken())
  wx.request({
    method: 'POST',
    url: conf.baseUrl + 'match/matchImages', 
    data: data,
    header: {
      'content-type': 'application/json',
      'sessionKey': getApp().getToken()
    },
    success: function (res) {
      console.log(res)
      conf.checkAuth(res) // 判斷token是否過期,如果過期則跳轉(zhuǎn)到登錄頁。
      fun(res);
    }
  });
}
 
function getMatchImages(id, fun) {
  wx.request({
   ...
    success: function (res) {
      conf.checkAuth(res)
   ...
    }
  });
}
 
function deleteImage(id, fun) {
...
  wx.request({
    ...
    success: function (res) {
      conf.checkAuth(res)
      fun(res);
      //return res;
    }
  });
}

在上面的代碼中,每個接口都會有重復(fù)的代碼,如配置baseUrl,token,checkAuth()。所以這里我們可以進一步去除重復(fù)代碼。

解決方案

統(tǒng)一網(wǎng)絡(luò)請求的入口,定義HttpUtil類。  封裝wx.request方法。

const get = (url, success, fail) => {
    var _token = getApp().getToken()
    wx.request({
      method:'GET',
      url: baseUrl + url,
      header:{
        'Authorization': _token,
        'content-type': 'application/json',
      },
      success:function(res) {
        checkAuth(res) // 在此處統(tǒng)一攔截token過期,跳轉(zhuǎn)到登錄界面
        console.log(res)
        success(res)
      },
      fail:function(res){
        console.log("請求失敗")
        fail(res)
      }
    })
}
···
 
module.exports = {
    get: get,
    post: post
}

HttpUtil的使用場景:

const httpUtil= require("../common/http/HttpUtil")
 
//邏輯層發(fā)起網(wǎng)絡(luò)請求,只需要傳遞url和成功回調(diào)函數(shù)。這比以前更加簡潔。
function getActivities(success) {
    httpUtil.get('meetup/api/v1/activity/getActivityList?pageNo=1&pageSize=100', function(res) {
        success(res)
    })
}
 
module.exports = {
    getActivities : getActivities
}

如上,在使用httpUtil時, 處理token過期的過程是透明的 ,細節(jié)封裝到了內(nèi)部。同時業(yè)務(wù)方也省去了設(shè)置token,token過期處理,baseUrl等樣板代碼。

使用Promise封裝回調(diào)函數(shù)

我們可以使用Promise,省去在調(diào)用請求接口時,傳入回調(diào)函數(shù)。

const get = (params) => {
    var _token = getApp().getToken()
    return new Promise((resolve, reject) => {
      wx.request({
        method:'GET',
        url: concatUrl(params),
        header:{
          'Authorization': _token,
          'content-type': 'application/json',
        },
        success: (res) => {
          checkAuth(res) // 在此處統(tǒng)一攔截token過期,跳轉(zhuǎn)到登錄界面
          resolve(res)
        },
        fail:(err) => {
          console.log("請求失敗")
          reject(err)
        }
      })
    })
}

使用方法:

// service層,定義網(wǎng)絡(luò)接口
function getActivities() {
    return HttpUtil.get({
        url: 'meetup/api/v1/activity/getActivityList?pageNo=1&pageSize=100'
    })
}
    /**
     * 加載活動列表(其中先加載群組以得到活動的頭像)
     */
    fetchGroupAndActivities: function(){
      if(this.data.isLogin) {
        var that = this
        getGroups() //先加載群組列表的頭像。
        .then((res)=>{
          if(res.data.code == "10000") { 
            ...
            return getActivities()  //其次,加載活動列表
          }
        })
        .then((res)=>{ //鏈?zhǔn)秸{(diào)用,處理活動列表數(shù)據(jù)。
          if (res.data.code == "10000") {
          ...
          }
        })
        .catch((err) => { //統(tǒng)一捕獲異常。 上面then中的任意回調(diào)發(fā)送異常,會直接中斷調(diào)用鏈,在這里處理。
          console.log("get act and group failed...")
        })
    }},

總結(jié)

封裝過程wx.requestAPI中,在HttpUtil內(nèi)部用Promise對象封裝baseUrl,token處理等,隱藏實現(xiàn)細節(jié),對外提供統(tǒng)一接口和支持鏈?zhǔn)秸{(diào)用,這是常見的門面設(shè)計模式,缺點是違背了開閉原則,如果新增一些攔截請求接口處理,則要修改原有的接口實現(xiàn)。后續(xù)可加一個中間層,作為攔截器,用于擴展新功能。

到此這篇關(guān)于微信小程序如何處理token過期問題的文章就介紹到這了,更多相關(guān)小程序token過期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript動態(tài)創(chuàng)建表格及添加數(shù)據(jù)實例詳解

    javascript動態(tài)創(chuàng)建表格及添加數(shù)據(jù)實例詳解

    這篇文章主要介紹了javascript動態(tài)創(chuàng)建表格及添加數(shù)據(jù),以實例形式分析了javascript動態(tài)創(chuàng)建表格的常用方法,包括不兼容IE6與兼容IE6的實現(xiàn)方法,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • ExtJS實現(xiàn)文件下載的方法實例

    ExtJS實現(xiàn)文件下載的方法實例

    這篇文章介紹了ExtJS實現(xiàn)文件下載的方法實例,有需要的朋友可以參考一下
    2013-11-11
  • js實現(xiàn)透明度漸變效果的方法

    js實現(xiàn)透明度漸變效果的方法

    這篇文章主要介紹了js實現(xiàn)透明度漸變效果的方法,涉及javascript實現(xiàn)漸變效果的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • javascript二維數(shù)組轉(zhuǎn)置實例

    javascript二維數(shù)組轉(zhuǎn)置實例

    這篇文章主要介紹了javascript二維數(shù)組轉(zhuǎn)置方法,實例分析了數(shù)組行列交換的轉(zhuǎn)置技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 原生js jquery ajax請求以及jsonp的調(diào)用方法

    原生js jquery ajax請求以及jsonp的調(diào)用方法

    下面小編就為大家?guī)硪黄鷍s jquery ajax請求以及jsonp的調(diào)用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 深入理解JavaScript內(nèi)存管理和GC算法

    深入理解JavaScript內(nèi)存管理和GC算法

    這篇文章主要介紹了深入理解JavaScript內(nèi)存管理和GC算法,下面文章主要講解JavaScript的垃圾回收機制以及常用的垃圾回收算法;還講解了V8引擎中的內(nèi)存管理,最后介紹了Performance工具如何使用
    2022-07-07
  • js實現(xiàn)無需數(shù)據(jù)庫的縣級以上聯(lián)動行政區(qū)域下拉控件

    js實現(xiàn)無需數(shù)據(jù)庫的縣級以上聯(lián)動行政區(qū)域下拉控件

    縣級以上聯(lián)動行政區(qū)域下拉控件,想必大家對此也有所熟悉,本文為大家介紹下使用js實現(xiàn)無需數(shù)據(jù)庫的聯(lián)動下拉控件,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • webpack結(jié)合express實現(xiàn)自動刷新的方法

    webpack結(jié)合express實現(xiàn)自動刷新的方法

    這篇文章主要給大家介紹了關(guān)于webpack結(jié)合express實現(xiàn)自動刷新的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用webpack具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • axios概念介紹和基本使用

    axios概念介紹和基本使用

    axios是一個基于Promise用于瀏覽器和nodejs的HTTP客戶端,下面這篇文章主要給大家介紹了關(guān)于axios概念介紹和基本使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 微信小程序?qū)崿F(xiàn)多選刪除列表數(shù)據(jù)功能示例

    微信小程序?qū)崿F(xiàn)多選刪除列表數(shù)據(jù)功能示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)多選刪除列表數(shù)據(jù)功能,涉及微信小程序列表數(shù)據(jù)讀取、顯示、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論

新源县| 海林市| 双流县| 兴隆县| 郸城县| 珠海市| 秦安县| 太仓市| 葫芦岛市| 正镶白旗| 衡山县| 五寨县| 那曲县| 靖江市| 叙永县| 岳阳县| 库伦旗| 错那县| 锦州市| 东阳市| 鹤庆县| 富民县| 富源县| 象山县| 蒲城县| 万州区| 闽清县| 台南市| 苍山县| 平武县| 交城县| 广元市| 锦屏县| 兰溪市| 鸡西市| 旺苍县| 兰州市| 屏东县| 张家口市| 宾川县| 汕头市|