refactor(router): 修改登录路由拦截逻辑以支持开发环境动态更新
将 needLogin 参数名改为 excludeLoginPath 以更准确表达用途 在开发环境下动态获取排除登录的页面列表 将路由配置中的排除列表与页面配置合并
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { getAllPages } from '@/utils'
|
||||
|
||||
export const LOGIN_STRATEGY_MAP = {
|
||||
DEFAULT_NO_NEED_LOGIN: 0, // 黑名单策略,默认可以进入APP
|
||||
DEFAULT_NEED_LOGIN: 1, // 白名单策略,默认不可以进入APP,需要强制登录
|
||||
@@ -11,9 +13,13 @@ export const REGISTER_PAGE = '/pages/login/register'
|
||||
|
||||
export const LOGIN_PAGE_LIST = [LOGIN_PAGE, REGISTER_PAGE]
|
||||
|
||||
// 在 definePage 里面配置了 excludeLoginPath 的页面,功能与 EXCLUDE_LOGIN_PATH_LIST 相同
|
||||
export const excludeLoginPathList = getAllPages('excludeLoginPath').map(page => page.path)
|
||||
|
||||
// 排除在外的列表,白名单策略指白名单列表,黑名单策略指黑名单列表
|
||||
export const EXCLUDE_LOGIN_PATH_LIST = [
|
||||
'/pages/xxx/index',
|
||||
...excludeLoginPathList, // 都是以 / 开头的 path
|
||||
]
|
||||
|
||||
// 在微信小程序里面是否使用小程序默认的登录,默认为true
|
||||
|
||||
@@ -5,9 +5,10 @@
|
||||
*/
|
||||
import { useTokenStore } from '@/store/token'
|
||||
import { tabbarStore } from '@/tabbar/store'
|
||||
import { getLastPage, parseUrlToObj } from '@/utils/index'
|
||||
import { getAllPages, getLastPage, parseUrlToObj } from '@/utils/index'
|
||||
import { EXCLUDE_LOGIN_PATH_LIST, isNeedLoginMode, LOGIN_PAGE, LOGIN_PAGE_LIST } from './config'
|
||||
|
||||
const isDev = import.meta.env.DEV
|
||||
export const FG_LOG_ENABLE = false
|
||||
|
||||
// 黑名单登录拦截器 - (适用于大部分页面不需要登录,少部分页面需要登录)
|
||||
@@ -57,8 +58,9 @@ export const navigateToInterceptor = {
|
||||
return true // 明确表示允许路由继续执行
|
||||
}
|
||||
else {
|
||||
const allExcludeLoginPages = getAllPages('excludeLoginPath') // dev 环境下,需要每次都重新获取,否则新配置就不会生效
|
||||
// 需要登录里面的 EXCLUDE_LOGIN_PATH_LIST 表示白名单,可以直接通过
|
||||
if (EXCLUDE_LOGIN_PATH_LIST.includes(path)) {
|
||||
if (EXCLUDE_LOGIN_PATH_LIST.includes(path) || (isDev && allExcludeLoginPages.some(page => page.path === path))) {
|
||||
return true // 明确表示允许路由继续执行
|
||||
}
|
||||
// 否则需要重定向到登录页
|
||||
|
||||
Reference in New Issue
Block a user