51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
|
|
import { fetchAdminMe, loginAdmin, type AdminUser } from '@/api/adminAuth'
|
|
|
|
export const useAdminSessionStore = defineStore('adminSession', {
|
|
state: () => ({
|
|
token: localStorage.getItem('admin_access_token') || '',
|
|
refreshToken: localStorage.getItem('admin_refresh_token') || '',
|
|
adminId: Number(localStorage.getItem('admin_id') || 0),
|
|
username: localStorage.getItem('admin_username') || '',
|
|
nickname: '',
|
|
}),
|
|
actions: {
|
|
async login(username: string, password: string) {
|
|
const result = await loginAdmin(username, password)
|
|
this.applySession(result.admin, result.tokens.access_token, result.tokens.refresh_token)
|
|
return result
|
|
},
|
|
async loadMe() {
|
|
const admin = await fetchAdminMe()
|
|
this.applyAdmin(admin)
|
|
return admin
|
|
},
|
|
logout() {
|
|
this.token = ''
|
|
this.refreshToken = ''
|
|
this.adminId = 0
|
|
this.username = ''
|
|
this.nickname = ''
|
|
localStorage.removeItem('admin_access_token')
|
|
localStorage.removeItem('admin_refresh_token')
|
|
localStorage.removeItem('admin_id')
|
|
localStorage.removeItem('admin_username')
|
|
},
|
|
applySession(admin: AdminUser, accessToken: string, refreshToken: string) {
|
|
this.token = accessToken
|
|
this.refreshToken = refreshToken
|
|
localStorage.setItem('admin_access_token', accessToken)
|
|
localStorage.setItem('admin_refresh_token', refreshToken)
|
|
this.applyAdmin(admin)
|
|
},
|
|
applyAdmin(admin: AdminUser) {
|
|
this.adminId = admin.id
|
|
this.username = admin.username
|
|
this.nickname = admin.nickname
|
|
localStorage.setItem('admin_id', String(admin.id))
|
|
localStorage.setItem('admin_username', admin.username)
|
|
},
|
|
},
|
|
})
|