frontend/src/stores/authStore.js

77 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-09-12 19:51:42 +03:00
import { defineStore } from 'pinia'
import { computed, ref } from 'vue'
import { apiClient } from '@/services/apiClient'
import router from '@/router/index.js'
2025-09-09 23:19:17 +03:00
export const useAuthStore = defineStore('auth', () => {
// state
2025-09-12 19:51:42 +03:00
const accessToken = ref(localStorage.getItem('accessToken'))
const user = ref(null)
2025-09-09 23:19:17 +03:00
// getters
2025-09-12 19:51:42 +03:00
const isAuthenticated = computed(() => !!accessToken.value)
2025-09-09 23:19:17 +03:00
// actions
const setToken = (token) => {
2025-09-12 19:51:42 +03:00
accessToken.value = token
if (token) {
localStorage.setItem('accessToken', token)
} else {
localStorage.removeItem('accessToken')
}
}
2025-09-09 23:19:17 +03:00
const login = async (email, password) => {
try {
2025-09-12 19:51:42 +03:00
const response = await apiClient.post('/user/auth/login', { email, password })
const { access_token, user: userData } = response
2025-09-12 19:51:42 +03:00
setToken(access_token)
user.value = userData || null
2025-09-13 20:38:35 +03:00
router.push({ name: 'collection'})
} catch (error) {
2025-09-12 19:51:42 +03:00
console.error('Login error:', error)
}
2025-09-12 19:51:42 +03:00
}
const logout = async () => {
2025-09-12 19:51:42 +03:00
setToken(null)
user.value = null
try {
2025-09-12 19:51:42 +03:00
await apiClient.post('/user/auth/logout')
2025-09-09 23:19:17 +03:00
} catch (error) {
2025-09-12 19:51:42 +03:00
console.error('Logout error:', error)
2025-09-09 23:19:17 +03:00
}
2025-09-12 19:51:42 +03:00
router.push('/startPage')
}
2025-09-09 23:19:17 +03:00
const forceLogout = () => {
2025-09-12 19:51:42 +03:00
setToken(null)
user.value = null
router.push({ name: 'startPage'})
}
2025-09-09 23:19:17 +03:00
2025-09-12 23:49:10 +03:00
const register = async (email, password) => {
try {
const response = await apiClient.post('/user', { email, password })
if (response.data.code === 200) {
router.push({ name: 'login' })
}
} catch (error) {
console.error('Register error:', error)
}
}
2025-09-09 23:19:17 +03:00
return {
accessToken,
user,
isAuthenticated,
setToken,
2025-09-09 23:19:17 +03:00
login,
logout,
forceLogout,
2025-09-12 23:49:10 +03:00
register,
2025-09-12 19:51:42 +03:00
}
})