Add custom URL support to vue frontend
This commit is contained in:
@@ -4,27 +4,58 @@ import { get, set } from 'idb-keyval'
|
||||
|
||||
export const useAuthStore = defineStore('auth', () => {
|
||||
const token = ref<string | null>(null)
|
||||
const serverUrl = ref<string | null>(null)
|
||||
const isAuthenticated = ref(false)
|
||||
|
||||
const setToken = async (newToken: string) => {
|
||||
// Get default server URL based on environment
|
||||
const getDefaultServerUrl = () => {
|
||||
return import.meta.env.DEV ? 'http://localhost:3000' : ''
|
||||
}
|
||||
|
||||
const setToken = async (newToken: string, customServerUrl?: string) => {
|
||||
token.value = newToken
|
||||
isAuthenticated.value = true
|
||||
await set('auth_token', newToken)
|
||||
|
||||
// Set server URL or use default
|
||||
const urlToUse = customServerUrl || getDefaultServerUrl()
|
||||
serverUrl.value = urlToUse
|
||||
|
||||
// Save both token and server URL
|
||||
await Promise.all([
|
||||
set('auth_token', newToken),
|
||||
set('server_url', urlToUse)
|
||||
])
|
||||
}
|
||||
|
||||
const setServerUrl = async (url: string) => {
|
||||
serverUrl.value = url
|
||||
await set('server_url', url)
|
||||
}
|
||||
|
||||
const clearAuth = async () => {
|
||||
token.value = null
|
||||
serverUrl.value = null
|
||||
isAuthenticated.value = false
|
||||
await set('auth_token', null)
|
||||
await Promise.all([
|
||||
set('auth_token', null),
|
||||
set('server_url', null)
|
||||
])
|
||||
}
|
||||
|
||||
const checkAuth = async () => {
|
||||
try {
|
||||
const storedToken = await get('auth_token')
|
||||
const [storedToken, storedServerUrl] = await Promise.all([
|
||||
get('auth_token'),
|
||||
get('server_url')
|
||||
])
|
||||
|
||||
if (storedToken) {
|
||||
// Set server URL or use default
|
||||
const urlToUse = storedServerUrl || getDefaultServerUrl()
|
||||
serverUrl.value = urlToUse
|
||||
|
||||
// Verify token with backend
|
||||
const baseUrl = import.meta.env.DEV ? 'http://localhost:3000' : ''
|
||||
const response = await fetch(`${baseUrl}/check-token`, {
|
||||
const response = await fetch(`${urlToUse}/check-token`, {
|
||||
headers: { Authorization: storedToken }
|
||||
})
|
||||
|
||||
@@ -42,15 +73,15 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
}
|
||||
}
|
||||
|
||||
const authenticate = async (authToken: string): Promise<boolean> => {
|
||||
const authenticate = async (authToken: string, customServerUrl?: string): Promise<boolean> => {
|
||||
try {
|
||||
const baseUrl = import.meta.env.DEV ? 'http://localhost:3000' : ''
|
||||
const response = await fetch(`${baseUrl}/check-token`, {
|
||||
const urlToUse = customServerUrl || getDefaultServerUrl()
|
||||
const response = await fetch(`${urlToUse}/check-token`, {
|
||||
headers: { Authorization: authToken }
|
||||
})
|
||||
|
||||
if (response.ok) {
|
||||
await setToken(authToken)
|
||||
await setToken(authToken, urlToUse)
|
||||
return true
|
||||
} else {
|
||||
await clearAuth()
|
||||
@@ -65,10 +96,13 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
|
||||
return {
|
||||
token,
|
||||
serverUrl,
|
||||
isAuthenticated,
|
||||
setToken,
|
||||
setServerUrl,
|
||||
clearAuth,
|
||||
checkAuth,
|
||||
authenticate
|
||||
authenticate,
|
||||
getDefaultServerUrl
|
||||
}
|
||||
})
|
Reference in New Issue
Block a user