js 获取token并保存30分钟,过期重新获取
小记一下:
thirdToken.js
import axios from 'axios';// 模拟获取 token 的函数
function fetchToken() {return new Promise((resolve, reject) => {//请求地址let url = `${THIRD_URL}/login`;let params = {"telephone": THIRD_ACCOUNT.telephone,"password": THIRD_ACCOUNT.password,};axios.post(url, params).then(res => {console.log("获取 token 成功", res);if (res.status === 200) {const newToken = res.data.data.token; // 直接获取 tokenresolve(newToken); // 请求成功后返回 token} else {reject(new Error("获取 token 失败")); // 请求失败时调用 reject}}).catch(error => {console.error("请求出错", error);reject(error); // 捕获请求错误并调用 reject});});
}// 存储 token 的函数
async function storeToken() {const token = await fetchToken();const expirationTime = Date.now() + 30 * 60 * 1000; // 当前时间加上 30 分钟,单位是毫秒// 存储 token 和有效时间localStorage.setItem('token', token);localStorage.setItem('tokenExpiration', expirationTime);
}// 获取 token 的函数
function getToken() {const token = localStorage.getItem('token');const expirationTime = localStorage.getItem('tokenExpiration');// 检查 token 是否存在以及是否过期if (token && expirationTime) {const currentTime = Date.now();if (currentTime < expirationTime) {// Token 有效return token;} else {// Token 过期,清除无效 tokenlocalStorage.removeItem('token');localStorage.removeItem('tokenExpiration');console.log("Token 已过期, 需要重新获取");}} else {console.log("Token 不存在, 需要获取");}return null; // Token 不可用
}// 使用 token 的示例 30分钟过期 重新获取
async function getThridToken() {let token = getToken(); // 从本地获取 tokenif (!token) {await storeToken(); // 如果 token 不可用,重新获取并存储token = getToken(); // 再次获取 token}return token; // 返回有效的 token
}export default getThridToken;
使用 import getThridToken from "@/utils/thirdToken";
try {//需要鉴权 获取tokenconst token = await getThridToken();console.log("获取到的 Token:", token);} catch (error) {console.error("获取 token 失败:", error);}