vue3.2/Vite/Ts33: 获取用户信息与token的理解
·
Yin灏
获取用户信息
- 原理:登录成功后跳转到 home 页面,只要 home 页面一挂载就去请求接口获取用户数据。
<!-- src/views/home/index.vue -->
<script setup lang="ts">
import { onMounted } from "vue";
// 引入仓库
import useUserStore from "@/store/modules/user";
// 首页加载完毕获取用户数据
onMounted(() => {
useUserStore.userInfo();
});
</script>
定义获取用户信息的方法
- 修改 state 的 ts 类型
// src/store/modules/types/type.ts
import type { RouteRecordRaw } from 'vue-router';
export default UserState {
token: string | null;
menuRoutes: RouteRecordRaw[],
username: stirng,
avatar: string
}
- src/store/modules/user.ts
//...
let useUserStore = defineStore("User", {
//...
state: (): UserState => {
return {
//...
username: "",
avatar: "",
};
},
//...
actions: {
//...
// 获取用户信息
async userInfo() {
const result = await reqUserInfo();
if (result.code === 200) {
this.username = result.data.checkUser.username;
this.avatar = result.data.checkUser.avatar;
}
},
},
});
//...
export default useUserStore;
- 登录成功获取到 token 之后,给其他请求添加 token
// src/utils/request.ts
//...
import useUserStore from "@/store/modules/user";
//...
request.interceptors.request.use((config) => {
let userStore = useUserStore();
if (userStore?.token) {
config.headers.token = userStore?.token;
}
return config;
});
//...