sessionize-auth
Version:
A flexible session management library for React, Next.js, Angular, and React Native
56 lines (46 loc) • 1.64 kB
text/typescript
import { useCallback } from "react";
import { useStore } from "zustand";
import { AuthConfig } from "../../core/types";
import { createSessionManager, ReturnToManager } from "../../core/sessionManager";
// Global session manager instance
let sessionManager: ReturnType<typeof createSessionManager> | null = null;
/**
* Hook for authentication state and actions
*/
export function useAuth<T = any>(config?: AuthConfig<T>) {
// Initialize session manager if not already done
if (!sessionManager && config) {
sessionManager = createSessionManager<T>(config);
}
if (!sessionManager) {
throw new Error("useAuth must be used within an AuthProvider or with config");
}
const account = useStore(sessionManager as any, (state: any) => state.account);
const isAuthenticated = useStore(sessionManager as any, (state: any) => state.isAuthenticated());
const startSession = useCallback((account: T) => {
sessionManager!.startSession(account);
}, []);
const closeSession = useCallback(() => {
sessionManager!.closeSession();
}, []);
const login = useCallback((account: T, returnTo?: string) => {
startSession(account);
// Handle return-to functionality
if (returnTo) {
window.location.href = returnTo;
} else {
const savedReturnTo = ReturnToManager.getReturnTo();
if (savedReturnTo) {
ReturnToManager.clearReturnTo();
window.location.href = savedReturnTo;
}
}
}, [startSession]);
return {
account,
isAuthenticated,
startSession,
closeSession,
login
};
}