46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
import axios from 'axios'
|
||
import router from '@/router'
|
||
|
||
const BASE_URL = import.meta.env.VITE_API_BASE_URL
|
||
const ENV_ADMIN_CLIENT_KEY = import.meta.env.VITE_ADMIN_CLIENT_KEY
|
||
const ENV_ADMIN_API_KEY = import.meta.env.VITE_ADMIN_API_KEY
|
||
|
||
// 使用者 API:帶 Bearer token
|
||
export const userHttp = axios.create({ baseURL: BASE_URL })
|
||
|
||
userHttp.interceptors.request.use(config => {
|
||
const token = localStorage.getItem('access_token')
|
||
if (token) {
|
||
config.headers['Authorization'] = `Bearer ${token}`
|
||
}
|
||
return config
|
||
})
|
||
|
||
userHttp.interceptors.response.use(
|
||
res => res,
|
||
err => {
|
||
if (err.response?.status === 401) {
|
||
localStorage.removeItem('access_token')
|
||
router.push('/login')
|
||
}
|
||
return Promise.reject(err)
|
||
}
|
||
)
|
||
|
||
// 管理員 API:帶 X-Client-Key / X-API-Key
|
||
export const adminHttp = axios.create({ baseURL: BASE_URL })
|
||
|
||
adminHttp.interceptors.request.use(config => {
|
||
const clientKey = sessionStorage.getItem('admin_client_key') || ENV_ADMIN_CLIENT_KEY
|
||
const apiKey = sessionStorage.getItem('admin_api_key') || ENV_ADMIN_API_KEY
|
||
if (clientKey && !sessionStorage.getItem('admin_client_key')) {
|
||
sessionStorage.setItem('admin_client_key', clientKey)
|
||
}
|
||
if (apiKey && !sessionStorage.getItem('admin_api_key')) {
|
||
sessionStorage.setItem('admin_api_key', apiKey)
|
||
}
|
||
if (clientKey) config.headers['X-Client-Key'] = clientKey
|
||
if (apiKey) config.headers['X-API-Key'] = apiKey
|
||
return config
|
||
})
|