diff --git a/src/stores/user.ts b/src/stores/user.ts index 9c2e349..c6c626b 100644 --- a/src/stores/user.ts +++ b/src/stores/user.ts @@ -12,15 +12,21 @@ const defaultOnboardingState: OnboardingState = { }; export const useUserStore = defineStore('user', () => { - const userId: Ref = ref(localStorage.getItem('userId')); - const sessionId: Ref = ref(localStorage.getItem('sessionId')); + const userId: Ref = ref(localStorage.getItem('userId') || undefined); + const sessionId: Ref = ref(localStorage.getItem('sessionId') || undefined); - const setUserIdAndSessionId = async (referer: string | null) => { + const setUserIdAndSessionId = async (referer?: string) => { const userAndSession = await getUserAndSession(userId.value, sessionId.value, referer); userId.value = userAndSession?.userId; sessionId.value = userAndSession?.sessionId; - localStorage.setItem('userId', userAndSession?.userId || ''); - localStorage.setItem('sessionId', userAndSession?.sessionId || ''); + + if (userId.value !== localStorage.getItem('userId')) { + localStorage.setItem('userId', userId.value || ''); + } + + if (sessionId.value !== localStorage.getItem('sessionId')) { + localStorage.setItem('sessionId', sessionId.value || ''); + } return { userId: userId.value, diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 94f7dab..b2d7d10 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -4,40 +4,48 @@ export const getUserAndSession = async ( userId?: string, sessionId?: string, referer?: string -): { userId: string; sessionId: string } => { +): Promise<{ userId: string; sessionId: string }> => { try { - if (userId && sessionId) return { userId, sessionId }; - if (!userId && sessionId) { localStorage.removeItem('sessionId'); } - let newUserId = userId; - let newSessionId = sessionId; - - if (!newUserId) { - const parts: string[] = []; - if (userId) parts.push(`user_id=${encodeURIComponent(userId)}`); - if (referer) parts.push(`referer=${encodeURIComponent(referer)}`); + const newUserId = await getUserId(userId, referer); + const newSessionId = await getSessionId(newUserId, sessionId, referer); - const query = parts.length ? `?${parts.join('&')}` : ''; - const respUserId = await postAxios(`/user/user${query}`); - newUserId = respUserId.data.user_id; + if (!newUserId || !newSessionId) { + throw new Error('Failed to retrieve user ID or session ID'); } - if (newUserId) { - const parts: string[] = []; - parts.push(`user_id=${encodeURIComponent(newUserId)}`); - if (referer) parts.push(`referer=${encodeURIComponent(referer)}`); - - const query = `?${parts.join('&')}`; - const respSessionId = await postAxios(`/user/session${query}`); - - newSessionId = respSessionId.data.session_id; - } return { userId: newUserId, sessionId: newSessionId }; } catch (error) { console.warn('Failed to get user and session:', error); throw error; } }; + +const getUserId = async (userId?: string, referer?: string): Promise => { + const parts: string[] = []; + + if (userId) parts.push(`user_id=${encodeURIComponent(userId)}`); + if (referer) parts.push(`referer=${encodeURIComponent(referer)}`); + + const query = parts.length ? `?${parts.join('&')}` : ''; + const respUserId = await postAxios(`/user/user${query}`); + return respUserId.data.user_id; +}; + +const getSessionId = async ( + userId: string, + sessionId?: string, + referer?: string +): Promise => { + const parts: string[] = []; + parts.push(`user_id=${encodeURIComponent(userId)}`); + if (sessionId) parts.push(`session_id=${encodeURIComponent(sessionId)}`); + if (referer) parts.push(`referer=${encodeURIComponent(referer)}`); + + const query = `?${parts.join('&')}`; + const respSessionId = await postAxios(`/user/session${query}`); + return respSessionId.data.session_id; +};