Files
tp/main_dc/yalarba/easySite/easySite/app/composables/useAuth.ts
T
valitovgaziz 8fee46ce5c modified: main_dc/yalarba/easySite/easySite/app/composables/useAuth.ts
modified:   main_dc/yalarba/easySite/easySite/app/middleware/auth.ts
modified:   main_dc/yalarba/easySite/easySite/app/pages/auth/login.vue
	modified:   main_dc/yalarba/easySite/easySite/app/pages/auth/register.vue
	new file:   main_dc/yalarba/easySite/easySite/app/pages/plugins/auth.client.ts
	modified:   main_dc/yalarba/easySite/easySite/app/pages/profile/index.vue
	new file:   main_dc/yalarba/easySite/easySite/app/schemas/auth.ts
modified:   main_dc/yalarba/easySite/easySite/app/types/auth.ts
	modified:   main_dc/yalarba/easySite/easySite/package-lock.json
	modified:   main_dc/yalarba/easySite/easySite/package.json
update login register with use vee and firebase
2025-11-14 23:55:02 +05:00

102 lines
2.4 KiB
TypeScript

// composables/useAuth.ts
import type { User, LoginForm, RegisterForm } from '~/types/auth'
export const useAuth = () => {
const user = useState<User | 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<{ user: User; token: string }>(
'https://easysite102.ru/api/auth/login',
{
method: 'POST',
body: credentials
}
)
user.value = response.user
// Сохраняем токен в localStorage или cookies
localStorage.setItem('auth_token', response.token)
return response
// eslint-disable-next-line no-useless-catch
} catch (error) {
throw error
} finally {
loading.value = false
}
}
const register = async (userData: RegisterForm) => {
loading.value = true
try {
const { passwordConfirm, ...registerData } = userData
const full_name = `${userData.first_name} ${userData.last_name}`
const response = await $fetch<{ user: User }>(
'https://easysite102.ru/api/auth/register',
{
method: 'POST',
body: {
...registerData,
full_name
}
}
)
return response
// eslint-disable-next-line no-useless-catch
} catch (error) {
throw error
} finally {
loading.value = false
}
}
const logout = async () => {
try {
await $fetch('https://easysite102.ru/api/auth/logout', {
method: 'POST'
})
} 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: User }>(
'https://easysite102.ru/api/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
}
}