62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
export const useAuth = () => {
|
|
const tokenCookie = useCookie('token')
|
|
const authMessageCookie = useCookie('authMessage')
|
|
const router = useRouter()
|
|
const config = useRuntimeConfig()
|
|
|
|
const isLoggedIn = () => {
|
|
if (!import.meta.client) return false
|
|
const token = localStorage.getItem('token')
|
|
const tenantId = localStorage.getItem('tenantId')
|
|
return !!(token && tenantId)
|
|
}
|
|
|
|
const logout = async () => {
|
|
if (import.meta.client) {
|
|
// Call backend logout endpoint
|
|
try {
|
|
const token = localStorage.getItem('token')
|
|
const tenantId = localStorage.getItem('tenantId')
|
|
|
|
if (token) {
|
|
await fetch(`${config.public.apiBaseUrl}/api/auth/logout`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`,
|
|
...(tenantId && { 'x-tenant-id': tenantId }),
|
|
},
|
|
})
|
|
}
|
|
} catch (error) {
|
|
console.error('Logout error:', error)
|
|
}
|
|
|
|
// Clear local storage
|
|
localStorage.removeItem('token')
|
|
localStorage.removeItem('tenantId')
|
|
localStorage.removeItem('user')
|
|
|
|
// Clear cookie for server-side check
|
|
tokenCookie.value = null
|
|
|
|
// Set flash message for login page
|
|
authMessageCookie.value = 'Logged out successfully'
|
|
|
|
// Redirect to login page
|
|
router.push('/login')
|
|
}
|
|
}
|
|
|
|
const getUser = () => {
|
|
if (!import.meta.client) return null
|
|
const userStr = localStorage.getItem('user')
|
|
return userStr ? JSON.parse(userStr) : null
|
|
}
|
|
|
|
return {
|
|
isLoggedIn,
|
|
logout,
|
|
getUser,
|
|
}
|
|
}
|