permission.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * @description 自定义路由拦截
  3. */
  4. // 白名单即不需要验证的页面路径
  5. const whiteList = [
  6. '/pages/login/login',
  7. // {
  8. // pattern: /^\/pages\/login\/login\/*/
  9. // } //支持正则表达式
  10. ]
  11. export default async function() {
  12. const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']
  13. // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
  14. list.forEach(item => {
  15. uni.addInterceptor(item, {
  16. invoke(e) {
  17. // 获取要跳转的页面路径(url去掉"?"和"?"后的参数)
  18. const url = e.url.split('?')[0]
  19. // 判断当前窗口是白名单,如果是则不重定向路由
  20. let pass
  21. if (whiteList) {
  22. pass = whiteList.some((item) => {
  23. if (typeof(item) === 'object' && item.pattern) {
  24. return item.pattern.test(url)
  25. }
  26. return url === item
  27. })
  28. }
  29. // 不是白名单并且没有token
  30. if (!pass && !uni.getStorageSync('Token')) {
  31. uni.removeStorageSync('Token')
  32. uni.showToast({
  33. title: "token过期,请重新登录"
  34. })
  35. uni.redirectTo({
  36. url: "/pages/login/login"
  37. })
  38. return false
  39. }
  40. return e
  41. },
  42. fail(err) { // 失败回调拦截
  43. console.log(err)
  44. }
  45. })
  46. })
  47. }