mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-07 19:10:12 +08:00
feat: refactor frontend auth error handling
This commit is contained in:
1 parent
bcb9f1f803
commit
b09aa0debf
1 file changed
+50
-80
+50
-80
@@ -12,102 +12,72 @@ export async function isLoggedIn() {
|
|||||||
return loggedIn
|
return loggedIn
|
||||||
}
|
}
|
||||||
|
|
||||||
export const login = async (username, password) => {
|
function handleRequestError(err) {
|
||||||
try {
|
if (!err.response) throw err // Not an axios error
|
||||||
await api.post('/auth/login', { username, password })
|
const { status } = err.response
|
||||||
return true
|
if (status === 429) {
|
||||||
} catch (err) {
|
throw new TooManyRequestsError(err.response.data.message)
|
||||||
if (!err.response) throw err
|
|
||||||
const { status } = err.response
|
|
||||||
switch (status) {
|
|
||||||
case 401:
|
|
||||||
throw new UnauthorizedError(err.response.data.message)
|
|
||||||
|
|
||||||
case 429:
|
|
||||||
throw new TooManyRequestsError(err.response.data.message)
|
|
||||||
|
|
||||||
case 400:
|
|
||||||
throw new ValidationError(err.response.data.message)
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (status === 401) {
|
||||||
|
throw new UnauthorizedError(err.response.data.message)
|
||||||
|
}
|
||||||
|
if (status === 400) {
|
||||||
|
const { errors } = err.response.data
|
||||||
|
if (Array.isArray(errors) && errors.length > 0) {
|
||||||
|
const { path, msg } = errors[0]
|
||||||
|
switch (path) {
|
||||||
|
case 'username':
|
||||||
|
throw new ValidationError('Username is already taken')
|
||||||
|
case 'email':
|
||||||
|
throw new ValidationError('Email is already taken')
|
||||||
|
case 'password':
|
||||||
|
throw new ValidationError('Password is too weak')
|
||||||
|
default:
|
||||||
|
throw new ValidationError(msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new ValidationError(err.response.data.message)
|
||||||
|
}
|
||||||
|
throw err
|
||||||
}
|
}
|
||||||
|
|
||||||
export const register = async (username, email, password) => {
|
export const login = (username, password) => {
|
||||||
try {
|
return api
|
||||||
await api.post('/auth/register', {
|
.post('/auth/login', { username, password })
|
||||||
|
.then(() => true)
|
||||||
|
.catch(handleRequestError)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const register = (username, email, password) => {
|
||||||
|
return api
|
||||||
|
.post('/auth/register', {
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
email,
|
email,
|
||||||
})
|
})
|
||||||
return true
|
.then(() => true)
|
||||||
} catch (err) {
|
.catch(handleRequestError)
|
||||||
if (!err.response) throw err
|
|
||||||
const { status } = err.response
|
|
||||||
if (status === 429) {
|
|
||||||
throw new TooManyRequestsError(err.response.data.message)
|
|
||||||
}
|
|
||||||
if (status === 401) {
|
|
||||||
throw new UnauthorizedError(err.response.data.message)
|
|
||||||
}
|
|
||||||
if (status === 400) {
|
|
||||||
const { errors } = err.response.data
|
|
||||||
if (Array.isArray(errors) && errors.length > 0) {
|
|
||||||
const { path, msg } = errors[0]
|
|
||||||
switch (path) {
|
|
||||||
case 'username':
|
|
||||||
throw new ValidationError('Username is already taken')
|
|
||||||
case 'email':
|
|
||||||
throw new ValidationError('Email is already taken')
|
|
||||||
case 'password':
|
|
||||||
throw new ValidationError('Password is too weak')
|
|
||||||
default:
|
|
||||||
throw new ValidationError(msg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new ValidationError(err.response.data.message)
|
|
||||||
}
|
|
||||||
throw err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const checkUsername = async (username) => {
|
export const checkUsername = async (username) => {
|
||||||
try {
|
return api
|
||||||
await api.get('/auth/check-username', {
|
.get('/auth/check-username', {
|
||||||
params: { username },
|
params: { username },
|
||||||
})
|
})
|
||||||
return true
|
.then(() => true)
|
||||||
} catch (err) {
|
.catch(handleRequestError)
|
||||||
if (!err.response) throw err
|
|
||||||
const { status } = err.response
|
|
||||||
if (status === 429) {
|
|
||||||
throw new TooManyRequestsError('Too many requests')
|
|
||||||
}
|
|
||||||
if (status === 409) {
|
|
||||||
throw new ValidationError('Username is already taken')
|
|
||||||
}
|
|
||||||
throw err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const chooseUsername = async (username) => {
|
export const chooseUsername = async (username) => {
|
||||||
try {
|
return api
|
||||||
await api.post('/auth/register-from-session', { username })
|
.post('/auth/register-from-session', { username })
|
||||||
} catch (err) {
|
.then(() => true)
|
||||||
if (!err.response) throw err
|
.catch(handleRequestError)
|
||||||
switch (err.response?.status) {
|
|
||||||
case 400:
|
|
||||||
throw new ValidationError('Username is already taken')
|
|
||||||
case 401:
|
|
||||||
throw new UnauthorizedError('You are not a new user')
|
|
||||||
default:
|
|
||||||
throw err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const logout = () => {
|
export const logout = () => {
|
||||||
return api.post('/auth/logout')
|
return api
|
||||||
|
.post('/auth/logout')
|
||||||
|
.then(() => true)
|
||||||
|
.catch(handleRequestError)
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user