页面刷新后自动恢复登录状态和权限数据,需将token与权限信息存入localstorage,启动时读取校验并还原pinia状态;敏感字段加密存储,过期则用refreshtoken静默刷新或跳转登录。

页面刷新后自动恢复登录状态和权限数据,关键在于把认证凭证(如 token)和权限信息持久化存储,并在应用启动时主动读取、校验、还原状态。
把 token 和权限信息存到 localStorage 或 sessionStorage
登录成功后,除了设置 pinia/vuex 状态,务必同步写入浏览器存储:
- 推荐用 localStorage:关闭标签页也不丢失,适合长期登录态(如“记住我”)
- 敏感字段(如 refreshToken)可加密后存储,或仅存 accessToken + 用户基础信息(role、permissions 等)
- 避免直接存明文密码、完整用户对象(含隐私字段),只存最小必要权限标识,例如:
{ token: 'xxx', roles: ['admin'], permissions: ['user:edit', 'order:delete'] }
App 启动时触发自动恢复逻辑
在 main.ts 或根组件(如 App.vue)的 onBeforeMount / onMounted 阶段检查本地存储:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 读取存储中的 token 和权限数据
- 若存在且未过期(建议服务端返回了
expiresAt时间戳,前端做简单校验),则调用 auth store 的 restore 方法 - 若 token 已过期但有 refreshToken,可静默发起刷新请求(需后端支持),成功后再更新本地存储和状态
- 若无效,则清空存储、重置 auth store,跳转至登录页
使用 Pinia 做响应式状态管理并支持 SSR 友好初始化
定义一个 useAuthStore,内部封装恢复逻辑:
- 在 store 的
state中声明初始值为null或undefined,不默认从 localStorage 读取(避免 SSR 渲染时出错) - 提供
restoreFromStorage()方法,在客户端执行,内部调用JSON.parse(localStorage.getItem('auth'))并合并到 state - 配合
defineStore(...).hydrate(Pinia 2.1+)或自定义 setup logic,在应用水合(hydration)后自动恢复 - 权限判断方法(如
can('user:delete'))应基于已恢复的permissions数组,而非实时查接口
补充:服务端配合与安全提醒
前端恢复只是体验优化,真实权限始终以服务端校验为准:
- 所有关键接口仍需携带 token 并由后端鉴权,禁止仅靠前端 permission 字段放行操作
- token 过期时间不宜过长(如 2 小时),refreshToken 应绑定设备指纹或 IP,且需服务端限制使用次数
- 用户主动登出时,必须清除 localStorage 并使 token 失效(调用退出接口)
- 监听
visibilitychange或beforeunload可选做 token 活跃性检查(非必需,但提升安全性)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










