UNPKG

nuxt-users

Version:

A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools

69 lines (68 loc) 1.95 kB
import { useState, useRuntimeConfig } from "#app"; import { computed, readonly } from "vue"; export const useAuthentication = () => { const user = useState("user", () => null); const { public: { nuxtUsers } } = useRuntimeConfig(); const apiBasePath = nuxtUsers?.apiBasePath; const isAuthenticated = computed(() => !!user.value); const login = (userData) => { const { password: _, ...userWithoutPassword } = userData; user.value = userWithoutPassword; if (import.meta.client) { localStorage.setItem("user", JSON.stringify(userWithoutPassword)); } }; const logout = async () => { try { await $fetch(`${apiBasePath}/session`, { method: "DELETE" }); user.value = null; if (import.meta.client) { localStorage.removeItem("user"); } } catch (error) { console.error("Logout failed:", error); user.value = null; } }; const fetchUser = async () => { try { const response = await $fetch(`${apiBasePath}/me`, { method: "GET" }); user.value = response.user; if (import.meta.client) { localStorage.setItem("user", JSON.stringify(response.user)); } return response.user; } catch (error) { console.error("Failed to fetch user:", error); user.value = null; if (import.meta.client) { localStorage.removeItem("user"); } return null; } }; const initializeUser = async () => { if (!import.meta.client) { return; } const storedUser = localStorage.getItem("user"); if (storedUser) { try { user.value = JSON.parse(storedUser); await fetchUser(); } catch (error) { console.error("Failed to parse stored user:", error); localStorage.removeItem("user"); user.value = null; } } }; return { user: readonly(user), isAuthenticated, login, logout, fetchUser, initializeUser }; };