feat(auth): 实现用户认证状态持久化及权限控制优化
- 新增 pinia-plugin-persistedstate 实现用户状态本地存储 - 重构 API 响应类型为统一模块管理 - 优化路由守卫逻辑,支持 token 自动登录 - 修复权限检查逻辑错误,调整 AI 聊天页访问权限 - 新增用户信息获取接口及类型定义
This commit is contained in:
@@ -20,7 +20,7 @@ const checkAccess = (
|
||||
}
|
||||
// 如果用户登录才能访问
|
||||
if (needAccess === ACCESS_ENUM.USER) {
|
||||
if (loginUserAccess !== ACCESS_ENUM.NOT_LOGIN) {
|
||||
if (loginUserAccess === ACCESS_ENUM.NOT_LOGIN) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ const checkAccess = (
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 如果说啥都不符合,那还说啥了,直接拒了
|
||||
return false;
|
||||
// 权限通过
|
||||
return true;
|
||||
};
|
||||
export default checkAccess;
|
||||
|
||||
@@ -5,8 +5,8 @@ import type { LoginUesr } from "../store/types";
|
||||
import { useUserStore } from "../store/user";
|
||||
import ACCESS_ENUM from "./accessEnum";
|
||||
import checkAccess from "./checkAccess";
|
||||
import { getAccessToken } from "@/utils/token";
|
||||
|
||||
const userStore = useUserStore();
|
||||
/**
|
||||
* 检查是否需要权限访问
|
||||
* @param to 要访问的路由
|
||||
@@ -39,12 +39,17 @@ const redirectWithAccess = (
|
||||
};
|
||||
// 这里接收异步函数,是因为下面要调用 userStore.getLoginUser()
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
const userStore = useUserStore(); // 必须在守卫内部获取 store,确保 pinia 已安装
|
||||
console.log("登陆用户信息", userStore.loginUser);
|
||||
let loginUser = userStore.loginUser;
|
||||
// 如果之前没登陆过,自动登录
|
||||
if (!loginUser || !loginUser.userRole) {
|
||||
await userStore.getLoginUser();
|
||||
loginUser = userStore.loginUser;
|
||||
// 如果之前没登陆过,且有 token,尝试自动登录
|
||||
// 没有 token 时不调用 API,避免未登录状态重复弹出错误提示
|
||||
if (!loginUser || !loginUser.userRole || loginUser.userRole === ACCESS_ENUM.NOT_LOGIN) {
|
||||
const token = getAccessToken();
|
||||
if (token) {
|
||||
await userStore.getLoginUser();
|
||||
loginUser = userStore.loginUser;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否需要权限访问
|
||||
|
||||
Reference in New Issue
Block a user