h5
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

37 lines
1.3 KiB

import { computed } from 'vue';
import { useStore } from 'vuex';
/**
* 初始化
* token 及 userId处理:
* 1.1 store里有token 且没过期直接:使用store的token √
* 1.2 store里的token不可用 查localStorage
* 因为一开始就将local的数据同步到了store里所以不用管local的数据了
* 2. store里token不可用 查userId 通过store里的userId获取token
* url 与 local的userId 一开始就同步到了store里所以不用考虑
* @param {object | null} options
*/
export default async function useGetToken() {
const store = useStore();
const token = computed(() => store.state.user.token);
const tokenIsAvailable = computed(() => store.getters['user/tokenIsAvailable']); // token是否可用
const userId = computed(() => store.getters['user/userId']);
debugger;
if (token.value && tokenIsAvailable.value) {
// 1.1 store里有token 且没过期直接:使用store的token
return token.value;
} else {
// 2. 根据userId获取token
if (userId.value) {
try {
const { token } = await store.dispatch('user/getTokenByUserId', userId.value);
return token;
} catch (error) {
console.error('error: ', error);
return null;
}
} else {
return null;
}
}
}