Merge pull request #444 from RohitR311/error-fix

feat: better error handling
This commit is contained in:
Karishma Shukla
2025-02-18 02:45:37 +05:30
committed by GitHub
7 changed files with 129 additions and 12 deletions

View File

@@ -487,6 +487,19 @@
},
"navbar": {
"project_name": "Maxun",
"notifications": {
"success": {
"logout": "Erfolgreich abgemeldet"
},
"errors": {
"logout": {
"unauthorized": "Sie sind nicht berechtigt, diese Aktion durchzuführen",
"server": "Serverfehler beim Abmelden",
"network": "Netzwerkfehler beim Abmelden",
"unknown": "Ein unerwarteter Fehler ist beim Abmelden aufgetreten"
}
}
},
"upgrade": {
"button": "Upgrade",
"modal": {

View File

@@ -498,6 +498,19 @@
},
"navbar": {
"project_name": "Maxun",
"notifications": {
"success": {
"logout": "Logged out successfully"
},
"errors": {
"logout": {
"unauthorized": "You are not authorized to perform this action",
"server": "Server error occurred during logout",
"network": "Network error while logging out",
"unknown": "An unexpected error occurred during logout"
}
}
},
"upgrade": {
"button": "Upgrade",
"modal": {

View File

@@ -488,6 +488,19 @@
},
"navbar": {
"project_name": "Maxun",
"notifications": {
"success": {
"logout": "Sesión cerrada exitosamente"
},
"errors": {
"logout": {
"unauthorized": "No estás autorizado para realizar esta acción",
"server": "Error del servidor durante el cierre de sesión",
"network": "Error de red al cerrar sesión",
"unknown": "Ocurrió un error inesperado al cerrar sesión"
}
}
},
"upgrade": {
"button": "Actualizar",
"modal": {

View File

@@ -488,6 +488,19 @@
},
"navbar": {
"project_name": "Maxun",
"notifications": {
"success": {
"logout": "ログアウトに成功しました"
},
"errors": {
"logout": {
"unauthorized": "この操作を実行する権限がありません",
"server": "ログアウト中にサーバーエラーが発生しました",
"network": "ログアウト中にネットワークエラーが発生しました",
"unknown": "ログアウト中に予期せぬエラーが発生しました"
}
}
},
"upgrade": {
"button": "アップグレード",
"modal": {

View File

@@ -488,6 +488,19 @@
},
"navbar": {
"project_name": "Maxun",
"notifications": {
"success": {
"logout": "退出登录成功"
},
"errors": {
"logout": {
"unauthorized": "您没有执行此操作的权限",
"server": "退出登录时发生服务器错误",
"network": "退出登录时发生网络错误",
"unknown": "退出登录时发生未知错误"
}
}
},
"upgrade": {
"button": "升级",
"modal": {

View File

@@ -140,14 +140,38 @@ router.post("/login", async (req, res) => {
}
});
router.get("/logout", async (req, res) => {
try {
res.clearCookie("token");
return res.json({ message: "Logout successful" });
} catch (error: any) {
res.status(500).send(`Could not logout user - ${error.message}`);
router.get(
"/logout",
requireSignIn,
async (req: Request, res) => {
const authenticatedReq = req as AuthenticatedRequest;
try {
if (!authenticatedReq.user) {
return res.status(401).json({
ok: false,
message: "Unauthorized",
code: "unauthorized"
});
}
res.clearCookie("token");
return res.status(200).json({
ok: true,
message: "Logged out successfully",
code: "success"
});
} catch (error) {
console.error('Logout error:', error);
return res.status(500).json({
ok: false,
message: "Error during logout",
code: "server",
error: process.env.NODE_ENV === 'development' ? error : undefined
});
}
}
});
);
router.get(
"/current-user",

View File

@@ -108,11 +108,39 @@ export const NavBar: React.FC<NavBarProps> = ({
};
const logout = async () => {
dispatch({ type: "LOGOUT" });
window.localStorage.removeItem("user");
const { data } = await axios.get(`${apiUrl}/auth/logout`);
notify("success", data.message);
navigate("/login");
try {
const { data } = await axios.get(`${apiUrl}/auth/logout`);
if (data.ok) {
dispatch({ type: "LOGOUT" });
window.localStorage.removeItem("user");
notify('success', t('navbar.notifications.success.logout'));
navigate("/login");
}
} catch (error: any) {
const status = error.response?.status;
let errorKey = 'unknown';
switch (status) {
case 401:
errorKey = 'unauthorized';
break;
case 500:
errorKey = 'server';
break;
default:
if (error.message?.includes('Network Error')) {
errorKey = 'network';
}
}
notify(
'error',
t(`navbar.notifications.errors.logout.${errorKey}`, {
error: error.response?.data?.message || error.message
})
);
navigate("/login");
}
};
const goToMainMenu = async () => {