Luxx/dashboard/src/stores/auth.js

60 lines
1.6 KiB
JavaScript

import { defineStore } from 'pinia'
import api from '../services/api'
export const useAuthStore = defineStore('auth', {
state: () => ({
user: null,
token: localStorage.getItem('access_token') || null,
isAuthenticated: !!localStorage.getItem('access_token')
}),
actions: {
async login(credentials) {
try {
const response = await api.post('/auth/login', credentials)
this.token = response.data.access_token
this.user = response.data.user
this.isAuthenticated = true
localStorage.setItem('access_token', this.token)
return { success: true }
} catch (error) {
return { success: false, error: error.message }
}
},
async register(userData) {
try {
const response = await api.post('/auth/register', userData)
// 注册后自动登录
return this.login({ username: userData.username, password: userData.password })
} catch (error) {
return { success: false, error: error.message }
}
},
async logout() {
try {
await api.post('/auth/logout')
} catch (error) {
// 忽略错误
}
this.token = null
this.user = null
this.isAuthenticated = false
localStorage.removeItem('access_token')
},
async fetchUser() {
try {
const response = await api.get('/auth/me')
this.user = response.data
return { success: true }
} catch (error) {
this.token = null
this.isAuthenticated = false
localStorage.removeItem('access_token')
return { success: false }
}
}
}
})