Files
freetable/frontend/src/stores/auth.js
T

45 lines
1.2 KiB
JavaScript

import { defineStore } from 'pinia'
import axios from 'axios'
export const useAuthStore = defineStore('auth', {
state: () => ({
token: localStorage.getItem('token') || null,
user: null
}),
getters: {
isAuthenticated: (state) => !!state.token
},
actions: {
async login(username, password) {
try {
const formData = new FormData()
formData.append('username', username)
formData.append('password', password)
const response = await axios.post('/api/v1/auth/login', formData)
this.token = response.data.access_token
localStorage.setItem('token', this.token)
return true
} catch (error) {
console.error('Login failed:', error)
return false
}
},
async register(email, username, password, fullName) {
try {
await axios.post('/api/v1/auth/register', {
email, username, password, full_name: fullName
})
return true
} catch (error) {
console.error('Registration failed:', error)
return false
}
},
logout() {
this.token = null
this.user = null
localStorage.removeItem('token')
}
}
})