import axios from 'axios' let csrfToken = '' let csrfTokenPromise = null export function setCsrfToken(token) { csrfToken = token || '' } export function getCsrfToken() { return csrfToken } // 登录成功或应用初始化后拉取当前会话的 CSRF token。 export async function fetchCsrfToken(forceRefresh = false) { if (!forceRefresh && csrfToken) { return csrfToken } if (csrfTokenPromise) { return csrfTokenPromise } csrfTokenPromise = axios.get('/shop/passport/csrfToken') .then((res) => { const token = res && res.code === 1 && res.data ? res.data.token : '' if (!token) { throw new Error('CSRF Token 获取失败') } setCsrfToken(token) return token }) .finally(() => { csrfTokenPromise = null }) return csrfTokenPromise }