ghostguild-org/app/composables/useAuth.js
Jennie Robinson Faber 78c592c13a Fix duplicate /api/auth/member call and add request deduplication
Remove redundant checkMemberStatus() from coming-soon page since the
auth-init plugin already handles it. Add in-flight request deduplication
to prevent concurrent calls from any source. Strip debug console.logs.
2026-03-19 15:04:04 +00:00

51 lines
1.1 KiB
JavaScript

let pendingRequest = null;
export const useAuth = () => {
const memberData = useState("auth.member", () => null);
const isAuthenticated = computed(() => !!memberData.value);
const isMember = computed(() => !!memberData.value);
const checkMemberStatus = async () => {
if (pendingRequest) {
return pendingRequest;
}
pendingRequest = (async () => {
try {
const response = await $fetch("/api/auth/member");
memberData.value = response;
return true;
} catch (error) {
memberData.value = null;
return false;
} finally {
pendingRequest = null;
}
})();
return pendingRequest;
};
const logout = async () => {
try {
await $fetch("/api/auth/logout", {
method: "POST",
});
memberData.value = null;
await navigateTo("/");
} catch (error) {
console.error("Logout failed:", error);
}
};
return {
isAuthenticated: readonly(isAuthenticated),
isMember: readonly(isMember),
memberData: readonly(memberData),
checkMemberStatus,
fetchMember: checkMemberStatus, // Alias for consistency
logout,
};
};