Add frontend/src/stores/auth.js
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
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')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user