41 lines
827 B
JavaScript
41 lines
827 B
JavaScript
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
|
|
}
|