Files
tp/main_dc/yalarba/easySite/app/composables/useAuth.ts
T
valitovgaziz 2941b14b38 flatten easySite directory: remove extra easySite/easySite nesting
- Moved contents of main_dc/yalarba/easySite/easySite/ up to easySite/
- Updated docker-compose.yml build context path
- Deleted empty nested easySite/ directory
2026-06-12 11:16:15 +05:00

92 lines
2.2 KiB
TypeScript

import type { UserInfo, LoginForm, RegisterForm, AuthResponse } from '~/types/auth'
export const useAuth = () => {
const config = useRuntimeConfig()
const apiBase = config.public.apiBase
const user = useState<UserInfo | null>('user', () => null)
const isAuthenticated = computed(() => !!user.value)
const loading = ref(false)
const login = async (credentials: LoginForm) => {
loading.value = true
try {
const response = await $fetch<AuthResponse>(`${apiBase}/auth/login`, {
method: 'POST',
body: credentials
})
user.value = response.user
localStorage.setItem('auth_token', response.token)
return response
} catch (error) {
throw error
} finally {
loading.value = false
}
}
const register = async (userData: RegisterForm) => {
loading.value = true
try {
const { passwordConfirm, ...registerData } = userData
const response = await $fetch<AuthResponse>(`${apiBase}/auth/register`, {
method: 'POST',
body: registerData
})
user.value = response.user
localStorage.setItem('auth_token', response.token)
return response
} catch (error) {
throw error
} finally {
loading.value = false
}
}
const logout = async () => {
const token = localStorage.getItem('auth_token')
try {
await $fetch(`${apiBase}/auth/logout`, {
method: 'POST',
headers: { Authorization: `Bearer ${token}` }
})
} catch (error) {
console.error('Logout error:', error)
} finally {
user.value = null
localStorage.removeItem('auth_token')
await navigateTo('/auth/login')
}
}
const checkAuth = async () => {
const token = localStorage.getItem('auth_token')
if (!token) return
try {
const response = await $fetch<{ user: UserInfo }>(`${apiBase}/auth/me`, {
headers: { Authorization: `Bearer ${token}` }
})
user.value = response.user
} catch (error) {
console.error('Auth check failed:', error)
localStorage.removeItem('auth_token')
}
}
return {
user: readonly(user),
isAuthenticated,
loading: readonly(loading),
login,
register,
logout,
checkAuth
}
}