Files
tp/begushiybashkir/bbvue/src/stores/auth.js
T
valitovgaziz 0e067c7477 modified: begushiybashkir/bbvue/package-lock.json
modified:   begushiybashkir/bbvue/package.json
	modified:   begushiybashkir/bbvue/src/main.js
	modified:   begushiybashkir/bbvue/src/router/index.js
	new file:   begushiybashkir/bbvue/src/stores/auth.js
	new file:   begushiybashkir/bbvue/src/stores/user.js
	modified:   begushiybashkir/bbvue/src/views/Login.vue
	modified:   begushiybashkir/bbvue/src/views/Profile.vue
	new file:   begushiybashkir/bbvue/src/views/ProfileEdit.vue
	modified:   begushiybashkir/bbvue/src/views/Register.vue
	modified:   serv_nginx/api_bb/bin/bb_api
	modified:   serv_nginx/api_bb/internal/handlers/auth.go
add axios, pinia store for user, auth, editProfile page
2025-10-10 01:30:30 +05:00

161 lines
4.3 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import axios from 'axios'
const API_BASE_URL = 'https://begushiybashkir.ru/api/v1/auth'
export const useAuthStore = defineStore('auth', () => {
const user = ref(null)
const token = ref(localStorage.getItem('auth_token') || '')
const loading = ref(false)
const error = ref('')
// Computed свойства
const isAuthenticated = computed(() => !!token.value && !!user.value)
const userFullName = computed(() => {
if (!user.value) return ''
return `${user.value.firstName} ${user.value.lastName}`
})
// Установка токена
const setToken = (newToken) => {
token.value = newToken
localStorage.setItem('auth_token', newToken)
// Устанавливаем токен в заголовки axios по умолчанию
axios.defaults.headers.common['Authorization'] = `Bearer ${newToken}`
}
// Очистка токена
const clearToken = () => {
token.value = ''
localStorage.removeItem('auth_token')
delete axios.defaults.headers.common['Authorization']
}
// Установка пользователя
const setUser = (userData) => {
user.value = userData
}
// Очистка пользователя
const clearUser = () => {
user.value = null
}
// Регистрация
const register = async (userData) => {
loading.value = true
error.value = ''
try {
const response = await axios.post(`${API_BASE_URL}/register`, userData)
// После успешной регистрации автоматически логинимся
const loginResponse = await axios.post(`${API_BASE_URL}/login`, {
email: userData.email,
password: userData.password
})
const { token: authToken, user: userInfo } = loginResponse.data
setToken(authToken)
setUser(userInfo)
return { success: true, data: response.data }
} catch (err) {
error.value = err.response?.data?.message || 'Ошибка регистрации'
return { success: false, error: error.value }
} finally {
loading.value = false
}
}
// Логин
const login = async (credentials) => {
loading.value = true
error.value = ''
try {
const response = await axios.post(`${API_BASE_URL}/login`, credentials)
const { token: authToken, user: userInfo } = response.data
setToken(authToken)
setUser(userInfo)
return { success: true, data: response.data }
} catch (err) {
error.value = err.response?.data?.message || 'Ошибка входа'
return { success: false, error: error.value }
} finally {
loading.value = false
}
}
// Выход
const logout = async () => {
loading.value = true
try {
await axios.post(`${API_BASE_URL}/logout`, {}, {
headers: {
'Authorization': `Bearer ${token.value}`
}
})
} catch (err) {
console.error('Ошибка при выходе:', err)
} finally {
clearToken()
clearUser()
loading.value = false
}
}
// Получение профиля
const fetchProfile = async () => {
loading.value = true
error.value = ''
try {
const response = await axios.get(`${API_BASE_URL}/profile`)
setUser(response.data)
return { success: true, data: response.data }
} catch (err) {
error.value = err.response?.data?.message || 'Ошибка загрузки профиля'
clearToken()
clearUser()
return { success: false, error: error.value }
} finally {
loading.value = false
}
}
// Инициализация при загрузке приложения
const initializeAuth = async () => {
if (token.value) {
// Восстанавливаем заголовок авторизации
axios.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
// Загружаем данные пользователя
await fetchProfile()
}
}
return {
// State
user,
token,
loading,
error,
// Getters
isAuthenticated,
userFullName,
// Actions
register,
login,
logout,
fetchProfile,
initializeAuth,
setToken,
clearToken
}
})