微信小程序的路由攔截

昨天寫了個(gè)小程序案例抽诉,發(fā)現(xiàn)小程序沒(méi)有提供路由攔截的功能陨簇,查了半天資料,終于是搞定了迹淌,這里記錄一下下
PS: 如果對(duì)node.js比較熟悉的話河绽,應(yīng)該對(duì)express/koa框架中的經(jīng)常提到的中間件概念比較熟悉,這里就使用中間件的機(jī)制來(lái)處理巍沙。結(jié)合小程序中Page()函數(shù)生命周期

需求描述

小程序需開(kāi)發(fā)過(guò)程中葵姥,有些頁(yè)面我們希望用戶登錄授權(quán)后才可以使用,然而我們不能再每個(gè)頁(yè)面添加登錄驗(yàn)證代碼句携,這樣似乎太麻煩了榔幸,希望能制作一個(gè)通用的小程序路由攔截器

實(shí)現(xiàn)過(guò)程

微信授權(quán)代碼

wx.getUserProfile({
  desc: '用于完善會(huì)員資料', // 聲明獲取用戶個(gè)人信息后的用途,后續(xù)會(huì)展示在彈窗中,請(qǐng)謹(jǐn)慎填寫
  success: (res) => {
    this.setData({
    userInfo: res.userInfo
    })
  }
})

用戶資料的保存削咆、清除

wx.getUserProfile({
  desc: '用于完善會(huì)員資料', // 聲明獲取用戶個(gè)人信息后的用途牍疏,后續(xù)會(huì)展示在彈窗中,請(qǐng)謹(jǐn)慎填寫
  success: (res) => {
    this.setData({
    userInfo: res.userInfo
    })
    wx.setStorageSync('userInfo', res.userInfo)
  },
  fail() {
    this.setData({
      userInfo: {}
    })
    wx.removeStorageSync('userInfo')
  }
})

全局路由攔截器

  • 攔截page頁(yè)面的onShow方法拨齐,判斷是否有權(quán)限
 /**
  * routerFillter --全局路由攔截器
  * @function
  * @param{Object} pageObj 當(dāng)前頁(yè)面的page對(duì)象
  * @param{Boolean} flag 是否開(kāi)啟權(quán)限判斷
  */
 exports.routerFilter = function (pageObj, flag = true) {
     if (flag) {
         pageObj.onShow = () => {
             if (!wx.getStorageSync('userInfo')) {
                 let pages = getCurrentPages();
                 let currPage = null;
                 if (pages.length) {
                     currPage = pages[pages.length - 1];
                 }
                 wx.setStorageSync('prevRouter', currPage.route) // 記錄當(dāng)前路由鳞陨,用于登錄完跳轉(zhuǎn)回當(dāng)前頁(yè)面
                  wx.redirectTo({
                      url: '/pages/auth/auth',
                  })
             }
         }
     }
     return Page(pageObj)
 }

授權(quán)代碼修改

  • 成功后返回之前頁(yè)面
//檢測(cè)授權(quán)登錄
getUserProfile() {
    wx.getUserProfile({
        desc: '用于完善資料',
        success: (res) => {
            this.setData({
                'userInfo.avatarUrl': res.userInfo.avatarUrl,
                'userInfo.gender': res.userInfo.gender,
                'userInfo.nickName': res.userInfo.nickName
            })
            wx.setStorageSync('userInfo', res.userInfo)
            wx.navigateTo({
                url: wx.getStorageSync('prevRouter'), // 使用路由跳轉(zhuǎn)
                fail: () => {
                    wx.switchTab({
                        url: '/' + wx.getStorageSync('prevRouter') // tab跳轉(zhuǎn)
                    })
                }
            })
        },
        fail() {
            wx.removeStorageSync('userInfo')
            wx.navigateBack({
                delta: 1
            })
        }
    })
}

使用攔截器

  • routerFillter 替換 Page
import {
    routerFillter
} from '../../utils/filter.js';
routerFillter({
    // 內(nèi)部和原來(lái)的Page一樣
})

總結(jié)

  • 上面貼代碼有點(diǎn)亂了,這里再寫一下過(guò)程??
    • 編寫授權(quán)頁(yè)面瞻惋,授權(quán)按鈕綁定事件
    • 在事件中 編寫微信授權(quán)代碼
    • 在工具函數(shù)中創(chuàng)建 全局路由攔截器厦滤,編寫函數(shù)
    • 修改微信授權(quán)代碼,處理路由跳轉(zhuǎn)
    • 在需要的頁(yè)面中使用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歼狼,一起剝皮案震驚了整個(gè)濱河市掏导,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羽峰,老刑警劉巖趟咆,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梅屉,居然都是意外死亡值纱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門坯汤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)虐唠,“玉大人,你說(shuō)我怎么就攤上這事玫霎≡渎耍” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵庶近,是天一觀的道長(zhǎng)翁脆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鼻种,這世上最難降的妖魔是什么反番? 我笑而不...
    開(kāi)封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮叉钥,結(jié)果婚禮上罢缸,老公的妹妹穿的比我還像新娘。我一直安慰自己投队,他們只是感情好枫疆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著敷鸦,像睡著了一般息楔。 火紅的嫁衣襯著肌膚如雪寝贡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天值依,我揣著相機(jī)與錄音圃泡,去河邊找鬼。 笑死愿险,一個(gè)胖子當(dāng)著我的面吹牛颇蜡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辆亏,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼风秤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了扮叨?” 一聲冷哼從身側(cè)響起乏屯,我...
    開(kāi)封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吟逝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蓝牲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惦费,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兵迅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薪贫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恍箭。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞧省,靈堂內(nèi)的尸體忽然破棺而出扯夭,到底是詐尸還是另有隱情,我是刑警寧澤鞍匾,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布交洗,位于F島的核電站,受9級(jí)特大地震影響橡淑,放射性物質(zhì)發(fā)生泄漏构拳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一梁棠、第九天 我趴在偏房一處隱蔽的房頂上張望置森。 院中可真熱鬧,春花似錦符糊、人聲如沸凫海。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)行贪。三九已至漾稀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓮顽,已是汗流浹背县好。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暖混,地道東北人缕贡。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拣播,于是被迫代替她去往敵國(guó)和親晾咪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容