| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import { defineStore } from 'pinia'
- import { ref, computed } from 'vue'
- import authApi from '@/api/auth'
- export const useAuthStore = defineStore('auth', () => {
- const user = ref(null)
- const accessToken = ref(null)
- const refreshToken = ref(null)
- const loading = ref(false)
- const error = ref(null)
- const isAuthenticated = computed(() => !!accessToken.value)
- const isSuperadmin = computed(() => user.value?.role === 'superadmin')
- const isOwner = computed(() => user.value?.role === 'owner')
- const isAdmin = computed(() => user.value?.role === 'admin')
- function setTokens(access, refresh) {
- accessToken.value = access
- refreshToken.value = refresh
- localStorage.setItem('access_token', access)
- if (refresh) {
- localStorage.setItem('refresh_token', refresh)
- }
- }
- function setUser(userData) {
- user.value = userData
- localStorage.setItem('user', JSON.stringify(userData))
- }
- function clearAuth() {
- user.value = null
- accessToken.value = null
- refreshToken.value = null
- localStorage.removeItem('access_token')
- localStorage.removeItem('refresh_token')
- localStorage.removeItem('user')
- }
- async function login(email, password) {
- loading.value = true
- error.value = null
- try {
- const data = await authApi.login(email, password)
- setTokens(data.access_token, data.refresh_token)
- setUser(data.user)
- return data.user
- } catch (err) {
- error.value = err.response?.data?.detail || 'Login failed'
- throw err
- } finally {
- loading.value = false
- }
- }
- async function logout() {
- try {
- await authApi.logout()
- } catch (err) {
- console.error('Logout API error:', err)
- } finally {
- clearAuth()
- }
- }
- async function checkAuth() {
- const storedToken = localStorage.getItem('access_token')
- const storedUser = localStorage.getItem('user')
- if (storedToken && storedUser) {
- accessToken.value = storedToken
- refreshToken.value = localStorage.getItem('refresh_token')
- user.value = JSON.parse(storedUser)
- // Verify token is still valid
- try {
- const userData = await authApi.getMe()
- setUser(userData)
- } catch (err) {
- console.error('Token verification failed:', err)
- clearAuth()
- }
- }
- }
- return {
- user,
- accessToken,
- refreshToken,
- loading,
- error,
- isAuthenticated,
- isSuperadmin,
- isOwner,
- isAdmin,
- login,
- logout,
- checkAuth,
- clearAuth
- }
- })
|