refactor: router guard

This commit is contained in:
yangsy
2025-08-26 16:33:35 +08:00
parent 0c1d1b2886
commit c875deb488
3 changed files with 27 additions and 17 deletions

View File

@@ -40,15 +40,6 @@ export const userClient = new Request({
export const ndmClient = new Request({
requestInterceptor: async (config) => {
// 当OCC的token失效时虽然不会影响车站请求但是需要重新登录所以在车站请求之前需要校验OCC的登录状态
const [err] = await userClient.post<void>(`/api/ndm/ndmKeepAlive/verify`, {}, { timeout: 5000 });
if (err) {
window.$message.error('登录超时,请重新登录');
const userStore = useUserStore();
userStore.resetStore();
router.push('/login');
return Promise.reject(err);
}
const userStore = useUserStore();
const { lampAuthorization, lampClientId, lampClientSecret } = getAppEnvConfig();
const newAuthorization = window.btoa(`${lampClientId}:${lampClientSecret}`);

View File

@@ -1,3 +1,4 @@
import { userClient } from '@/apis/client';
import type { Station } from '@/apis/domains';
import { ndmVerify } from '@/apis/requests';
import { STATION_LIST_QUERY_KEY } from '@/constants';
@@ -22,6 +23,12 @@ export function useStationListQuery() {
enabled: computed(() => pollingEnabled.value),
refetchInterval: getAppEnvConfig().requestInterval * 1000,
queryFn: async () => {
// 主动登录校验
const [err] = await userClient.post<void>(`/api/ndm/ndmKeepAlive/verify`, {}, { timeout: 5000 });
if (err) {
throw err;
}
const { data: ndmStationList } = await axios.get<{ code: string; name: string }[]>(`/minio/ndm/ndm-stations.json?_t=${dayjs().unix()}`);
let stations = ndmStationList.map<Station>((station) => ({

View File

@@ -49,22 +49,34 @@ const router = createRouter({
],
});
const whiteList = ['/login', '/debug'];
const whiteList = ['/debug'];
router.beforeEach((to, from, next) => {
const userStore = useUserStore();
if (userStore.userLoginResult?.token) {
const isAuthed = !!userStore.userLoginResult?.token;
// 放行白名单
const inWhiteList = whiteList.some((path) => to.path.startsWith(path));
if (inWhiteList) {
next();
return;
}
// 已登录用户不允许进入登录页(手动访问 /login 会重定向到首页)
if (to.path === '/login') {
if (isAuthed) {
next({ path: '/' });
} else {
next();
}
} else {
if (whiteList.includes(to.path)) {
next();
} else {
next('/login');
return;
}
// 其它路由按登录态控制
if (!isAuthed) {
next('/login');
} else {
next();
}
});