fix(user): allow re-login by removing existing session if user is already logged in

fix(main): conditionally initialize and connect to watchdog based on configuration

fix(instance): remove unused userID variable and commented debug logs in ListInstancesHandler
This commit is contained in:
2026-05-10 21:54:49 +08:00
parent a7d6bb0cb8
commit 5c748dafcd
4 changed files with 37 additions and 21 deletions
+17 -3
View File
@@ -182,9 +182,23 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) {
existingTokenInfo, err := session.GetTokenInfo(user.UserID)
if err == nil && existingTokenInfo != nil {
utils.SendErrorResponse(w, http.StatusConflict, "User is already logged in")
postLog.Warning(fmt.Sprintf("[LoginHandler] Login failed: user \"%s\" is already logged in", req.Username))
return
// If the user is already logged in, then remove the existing session to allow the new login, instead of returning an error.
sessionTokenMux := session.GetSessionTokenMap()
sessionTokenMux.RLock()
sessionID := ""
for sid, tokenLogout := range session.GetSessionTokenMapSnapshot() {
if tokenLogout == existingTokenInfo.Token {
sessionID = sid
break
}
}
sessionTokenMux.RUnlock()
if err := session.RemoveSession(sessionID); err != nil {
utils.SendErrorResponse(w, http.StatusInternalServerError, "Failed to logout")
postLog.Error(fmt.Sprintf("[LoginHandler] Failed to logout user [%d]%s: %v", user.UserID, session.GetUsernameByID(user.UserID), err))
return
}
postLog.Info(fmt.Sprintf("[LoginHandler] User \"%s\" is already logged in, remove previous session", req.Username))
}
token, err := session.GenerateToken(user.UserID)