mat/frontend-h5/src/store/auth.js

32 lines
912 B
JavaScript

import { defineStore } from 'pinia'
import * as authApi from '@/api/auth'
export const useAuthStore = defineStore('auth', {
state: () => ({
token: localStorage.getItem('h5_token') || '',
user: JSON.parse(localStorage.getItem('h5_user') || 'null'),
}),
getters: {
isAuthed: (s) => !!s.token,
},
actions: {
async login(payload) {
const data = await authApi.login(payload)
this.token = data.access
this.user = data.user || null
localStorage.setItem('h5_token', this.token)
if (this.user) localStorage.setItem('h5_user', JSON.stringify(this.user))
},
async loadUser() {
this.user = await authApi.fetchCurrentUser()
localStorage.setItem('h5_user', JSON.stringify(this.user))
},
logout() {
this.token = ''
this.user = null
localStorage.removeItem('h5_token')
localStorage.removeItem('h5_user')
},
},
})