新しい auth.js を作成する
/**
* @description パーミッション格納関数
*/
const authorizationKey = 'Authorization'export function getAuthorization() { return uni.getStorageSync(authorizationKey) }
export function setAuthorization(authorization) { return uni.setStorageSync(authorizationKey, authorization) }
export function removeAuthorization(authorization) { return uni.removeStorageSync(authorizationKey) }
新しい route.js
「@/utils/auth.js」から{getAuthorization}をインポートします
// ホワイト リスト
const whiteList = [
'/', // エントリ ページには '/'
'/pages/Login/Login'を直接記述する必要があることに注意してください
]export default async function() { const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab'] // トラバーサル メソッドは uni.navigateTo, uni.redirectTo, uni.reLaunch, uni. 4 つのルーティングswitchTab のメソッド add インターセプター list.forEach(item => { uni.addInterceptor(item, { invoke(e) { // リダイレクトするページのパスを取得 ("?" と "?" パラメータを削除した後の URL)) const url = e.url.split('?')[0] console.log('url', url)
// 現在のウィンドウがホワイトリストかどうかを判断し、そうであればルートをリダイレクトしない
let pass
if (whiteList) { pass = whiteList.some((item) => { if (typeof (item) === 'object' && item. pattern) { return item. pattern. test(url) } return url === item }) }
// ホワイトリストに登録されておらず、トークンもありません
if (!pass && !getAuthorization()) { uni.showToast({ title: 'Please login first', icon: 'none' }) uni.navigateTo({ url: "/pages/ Login /Login" }) return false } return e }, fail(err) { // 失敗コールバック インターセプト console.log(err) } }) }) }
アプリビュー
import routingIntercept from '@/router/route.js'
export default {
onLaunch: function() {
console.log('App Launch');
// ルーティング ナビゲーション ガードを実現するルートの統合インターセプト router.beforeEach function
routingIntercept()
} ,
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}