feat: implement force logout notifications for password reset and account deletion
All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m29s

This commit is contained in:
2026-03-05 16:52:11 -05:00
parent a10836d412
commit b2618361e4
8 changed files with 397 additions and 16 deletions

View File

@@ -103,7 +103,7 @@ import EntityEditForm from '../shared/EntityEditForm.vue'
import ModalDialog from '../shared/ModalDialog.vue'
import { parseErrorResponse, isEmailValid } from '@/common/api'
import { ALREADY_MARKED } from '@/common/errorCodes'
import { logoutUser } from '@/stores/auth'
import { logoutUser, suppressForceLogout } from '@/stores/auth'
import '@/assets/styles.css'
const router = useRouter()
@@ -300,6 +300,9 @@ function closeDeleteWarning() {
async function confirmDeleteAccount() {
if (!isEmailValid(confirmEmail.value)) return
// Set flag before the request so it's guaranteed to be set
// before the force_logout SSE event can arrive on this tab
suppressForceLogout.value = true
deletingAccount.value = true
try {
const res = await fetch('/api/user/mark-for-deletion', {
@@ -309,6 +312,7 @@ async function confirmDeleteAccount() {
})
if (!res.ok) {
suppressForceLogout.value = false
const { msg, code } = await parseErrorResponse(res)
let errorMessage = msg
if (code === ALREADY_MARKED) {
@@ -320,10 +324,11 @@ async function confirmDeleteAccount() {
return
}
// Success
// Success — suppressForceLogout is already set; show confirmation modal
showDeleteWarning.value = false
showDeleteSuccess.value = true
} catch {
suppressForceLogout.value = false
deleteErrorMessage.value = 'Network error. Please try again.'
showDeleteWarning.value = false
showDeleteError.value = true