Clone
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import api from '../services/api'
export const useAuthStore = defineStore('auth', () => {
const token = ref(localStorage.getItem('token'))
const user = ref(JSON.parse(localStorage.getItem('user') || 'null'))
const isAuthenticated = computed(() => !!token.value)
async function requestMagicLink(email) {
const response = await api.post('/auth/request', { email })
return response.data
}
async function verifyMagicLink(verifyToken) {
const response = await api.post('/auth/verify', { token: verifyToken })
const { token: authToken, user: userData } = response.data
token.value = authToken
user.value = userData
localStorage.setItem('token', authToken)
localStorage.setItem('user', JSON.stringify(userData))
// Set default authorization header
api.defaults.headers.common['Authorization'] = `Bearer ${authToken}`
return response.data
}
function logout() {
token.value = null
user.value = null
localStorage.removeItem('token')
localStorage.removeItem('user')
delete api.defaults.headers.common['Authorization']
}
// Initialize auth header if token exists
if (token.value) {
api.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
}
return {
token,
user,
isAuthenticated,
requestMagicLink,
verifyMagicLink,
logout
}
})