useAuthGuard
约 591 字大约 2 分钟
2025-08-23
主要方法
useAuthGuard(requiredRoles?)
功能:处理需要身份验证页面的组合函数,提供用户认证状态检查和角色权限验证
参数:
requiredRoles(可选): 指定需要的用户角色数组,类型为Database['public']['Enums']['user_role'][]
返回值:包含以下属性的对象:
user: Supabase 用户信息userInfo: 用户详细信息loading: 加载状态initialized: 是否已完成初始化initializing: 是否正在初始化isLoading: 综合加载状态(包含初始化和用户信息获取)isAuthenticated: 用户是否已认证hasRequiredRole: 用户是否拥有所需角色权限
内部逻辑:
- 使用计算属性实时检查认证状态和角色权限
- 监听认证状态变化,未登录时重定向到登录页
- 监听角色权限变化,权限不足时返回上一页
- 在组件挂载时进行初始检查,确保状态正确性
useAdminGuard()
功能:管理员权限守卫快捷方法
实现:调用 useAuthGuard(['admin']),只允许管理员角色访问
useTeacherGuard()
功能:教师权限守卫快捷方法
实现:调用 useAuthGuard(['admin', 'teacher']),允许管理员和教师角色访问
useStudentGuard()
功能:学生权限守卫快捷方法
实现:调用 useAuthGuard(['admin', 'student']),允许管理员和学生角色访问
计算属性说明
isAuthenticated
基于 user.value 判断用户是否已通过 Supabase 认证
hasRequiredRole
检查用户是否拥有所需的角色权限:
- 未指定所需角色时返回
true - 用户信息不存在时返回
true - 否则检查用户角色是否在所需角色列表中
isLoading
综合加载状态,包含以下任一情况:
loading.value(加载中)initializing.value(正在初始化)!initialized.value(未完成初始化)
监听器和生命周期
认证状态监听 (watch(isAuthenticated))
- 客户端环境下且初始化完成后
- 当用户未认证时自动重定向到登录页
角色权限监听 (watch(hasRequiredRole))
- 客户端环境下且初始化完成后
- 当用户已认证但缺少所需权限时返回上一页
初始检查 (onMounted)
- 等待初始化完成
- 如果未初始化则强制初始化
- 检查登录状态,未登录则重定向
- 检查角色权限,不足则返回上一页
版权所有
版权归属:Evoliant
许可证:MIT