Initial scaffold: FastAPI backend + Vue 3 frontend + Docker setup
Backend: config/db/security/logging core, SQLAlchemy models (Server, Credential, UpdateJob, UpdateLog, AuditLog, User), services (winrm, ssh, cau, audit, job_runner), REST API (auth, servers, updates, audit), Socket.io WebSocket layer. Frontend: Vue 3 + TS + Pinia + Tailwind, Views (Dashboard, Servers, Updates, Audit, Login), axios + socket.io-client, nginx prod config.
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import { apiClient } from '@/api/client'
|
||||
import { disconnectSocket } from '@/api/socket'
|
||||
|
||||
const TOKEN_KEY = 'iu_token'
|
||||
|
||||
export const useAuthStore = defineStore('auth', () => {
|
||||
const token = ref<string | null>(localStorage.getItem(TOKEN_KEY))
|
||||
const username = ref<string | null>(null)
|
||||
|
||||
const isAuthenticated = computed(() => token.value !== null)
|
||||
|
||||
async function login(user: string, password: string): Promise<void> {
|
||||
const { data } = await apiClient.post('/api/auth/login', {
|
||||
username: user,
|
||||
password,
|
||||
})
|
||||
token.value = data.access_token
|
||||
username.value = user
|
||||
localStorage.setItem(TOKEN_KEY, data.access_token)
|
||||
}
|
||||
|
||||
function logout(): void {
|
||||
token.value = null
|
||||
username.value = null
|
||||
localStorage.removeItem(TOKEN_KEY)
|
||||
disconnectSocket()
|
||||
}
|
||||
|
||||
return { token, username, isAuthenticated, login, logout }
|
||||
})
|
||||
Reference in New Issue
Block a user