feat(http): enhance request authorization handling for login requests
Frontend CI / Frontend (push) Successful in 1m53s
Frontend CI / Frontend (push) Successful in 1m53s
fix(login-view): improve error message formatting for login errors
This commit is contained in:
@@ -43,9 +43,15 @@ const client: AxiosInstance = axios.create({
|
|||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function isLoginRequest(url: string | undefined, method: string | undefined): boolean {
|
||||||
|
return (
|
||||||
|
method?.toLowerCase() === 'post' && (url === '/auth/login' || Boolean(url?.endsWith('/auth/login')))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
client.interceptors.request.use((config) => {
|
client.interceptors.request.use((config) => {
|
||||||
const { session } = readStoredSession()
|
const { session } = readStoredSession()
|
||||||
if (session.accessToken) {
|
if (session.accessToken && !isLoginRequest(config.url, config.method)) {
|
||||||
config.headers = config.headers ?? {}
|
config.headers = config.headers ?? {}
|
||||||
config.headers['Authorization'] = `Bearer ${session.accessToken}`
|
config.headers['Authorization'] = `Bearer ${session.accessToken}`
|
||||||
}
|
}
|
||||||
@@ -58,7 +64,7 @@ client.interceptors.response.use(
|
|||||||
const status = error.response?.status
|
const status = error.response?.status
|
||||||
const payload = error.response?.data
|
const payload = error.response?.data
|
||||||
|
|
||||||
if (status === 401) {
|
if (status === 401 && !isLoginRequest(error.config?.url, error.config?.method)) {
|
||||||
clearStoredSession()
|
clearStoredSession()
|
||||||
onUnauthorized?.()
|
onUnauthorized?.()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,7 +146,8 @@ function formatLoginError(error: unknown): string {
|
|||||||
login_guard_unavailable: '登录保护暂时不可用',
|
login_guard_unavailable: '登录保护暂时不可用',
|
||||||
}
|
}
|
||||||
const message = messages[error.message] ?? error.message
|
const message = messages[error.message] ?? error.message
|
||||||
return error.detail ? `${message},${error.detail}` : message
|
const detail = error.detail?.trim()
|
||||||
|
return detail && detail !== message ? `${message},${detail}` : message
|
||||||
}
|
}
|
||||||
if (error instanceof Error) {
|
if (error instanceof Error) {
|
||||||
return error.message
|
return error.message
|
||||||
|
|||||||
Reference in New Issue
Block a user