feat : full logout

This commit is contained in:
Yusron alamsyah
2026-03-25 14:36:23 +07:00
parent 3e62ebbd14
commit 190ab60c72
2 changed files with 54 additions and 5 deletions
@@ -99,7 +99,20 @@ const sessionInfo = computed(() => ({
:loading="auth.isLoading.value"
:disabled="auth.isLoading.value"
>
Keluar
Logout
</v-btn>
<v-btn
class="mt-3"
color="primary"
variant="outlined"
block
@click="auth.fullLogout"
prepend-icon="mdi-logout"
:loading="auth.isLoading.value"
:disabled="auth.isLoading.value"
>
Full Logout
</v-btn>
</div>
</v-sheet>
+40 -4
View File
@@ -107,9 +107,6 @@ export const useAuth = () => {
const response = await $fetch<LogoutResponse>('/api/auth/logout', {
method: 'POST'
})
// const response = await $fetch<LogoutResponse>('/api/auth/clear-session', {
// method: 'POST'
// });
// Clear user immediately regardless of response
_user.value = null
@@ -142,6 +139,45 @@ export const useAuth = () => {
}
}
const fullLogout = async (): Promise<void> => {
try {
_isLoading.value = true
clearError()
const response = await $fetch<LogoutResponse>('/api/auth/clear-session', {
method: 'POST'
});
// Clear user immediately regardless of response
_user.value = null
_accessToken.value = null
if (response?.success && response?.logoutUrl) {
//remove all tokens from localstorage
localStorage.removeItem('idToken');
localStorage.removeItem('accessToken');
localStorage.removeItem('refreshToken');
// Keycloak will redirect back to the base URL after logout
// We can add a query param to detect the logout and show a message
window.location.href = response.logoutUrl
} else {
const warningMsg = response?.error || response?.message || 'No logout URL received'
console.warn('⚠️', warningMsg)
_error.value = warningMsg
await navigateTo('/auth/login')
}
} catch (logoutError: any) {
console.error('❌ Logout error:', logoutError)
_error.value = logoutError.message || 'Logout failed'
_user.value = null
_accessToken.value = null
await navigateTo('/auth/login')
} finally {
_isLoading.value = false
}
}
// Helper function to refresh user data
const refreshUser = async (): Promise<boolean> => {
const userData = await checkAuth()
@@ -162,6 +198,6 @@ export const useAuth = () => {
logout,
refreshUser,
clearError,
fullLogout
}
}