Vue3 Pinia Token 全流程操作指南
本文梳理 Vue3 官方推荐状态管理库 Pinia 下的 Token 操作逻辑,剥离具体项目细节,聚焦「获取→存储→使用→过期→清除」的核心生命周期,结合 Pinia 「无 mutations、actions 直接异步、模块化更简单」的特性,每个步骤均标注「通用场景+Pinia 通用方案 + 注意事项」,可直接作为开发速查表。
前置说明:Pinia 与 Vuex 的核心区别(Token 操作相关)
| 特性 | Vuex | Pinia |
|---|---|---|
| 修改状态的方式 | 必须通过 commit 调用 mutations | actions 中可直接修改 state |
| 异步处理 | actions 处理异步,mutations 同步 | actions 可直接写 async/await |
| 模块化 | 需开启 namespaced: true 隔离 | 天然模块化,无需额外配置 |
| TypeScript 支持 | 配置复杂 | 原生支持,类型推导友好 |
一、第一步:登录成功获取并存储 Token
通用场景
用户通过账号密码/验证码等方式登录,后端验证通过后返回 Token,需将 Token 存入 Pinia(全局共享)和本地存储(刷新不丢)。
Pinia 通用方案
- 定义
user模块的 Pinia Store,包含token状态和login异步 action; - 在
loginaction 中调用登录接口,提取 Token; - 直接修改 state(无需 commit),同时存入本地存储(推荐 localStorage)。
代码示例
// 1. 定义 Pinia Store(src/stores/user.js)
import { defineStore } from 'pinia'
import { loginAPI } from '@/api/user'
export const useUserStore = defineStore('user', {
// state:必须是函数返回对象(避免组件间共享状态)
state: () => ({
token: localStorage.getItem('token') ||
}),
: {
() {
res = (loginForm)
token = res..
. = token
.(, token)
}
}
})
<script setup>
{ useUserStore }
userStore = ()
= () => {
{
userStore.({ : , : })
()
} (err) {
( + (err.?.?. || ))
}
}
</script>

