feat: implement session_jwt and enhance auth

This commit is contained in:
Siddhant Rai
2025-03-17 11:51:30 +05:30
parent 7fd377bdbe
commit 4406426515
9 changed files with 148 additions and 59 deletions

View File

@@ -0,0 +1,55 @@
import { useEffect, useRef, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import userService from '../api/services/userService';
import { selectToken, setToken } from '../preferences/preferenceSlice';
export default function useAuth() {
const dispatch = useDispatch();
const token = useSelector(selectToken);
const [authType, setAuthType] = useState(null);
const [showTokenModal, setShowTokenModal] = useState(false);
const [isAuthLoading, setIsAuthLoading] = useState(true);
const isGeneratingToken = useRef(false);
const generateNewToken = async () => {
if (isGeneratingToken.current) return;
isGeneratingToken.current = true;
const response = await userService.getNewToken();
const { token: newToken } = await response.json();
localStorage.setItem('authToken', newToken);
dispatch(setToken(newToken));
setIsAuthLoading(false);
return newToken;
};
useEffect(() => {
const initializeAuth = async () => {
try {
const configRes = await userService.getConfig();
const config = await configRes.json();
setAuthType(config.auth_type);
if (config.auth_type === 'session_jwt' && !token) {
await generateNewToken();
} else if (config.auth_type === 'simple_jwt' && !token) {
setShowTokenModal(true);
setIsAuthLoading(false);
} else {
setIsAuthLoading(false);
}
} catch (error) {
console.error('Auth initialization failed:', error);
setIsAuthLoading(false);
}
};
initializeAuth();
}, []);
const handleTokenSubmit = (enteredToken: string) => {
localStorage.setItem('authToken', enteredToken);
dispatch(setToken(enteredToken));
setShowTokenModal(false);
};
return { authType, showTokenModal, isAuthLoading, token, handleTokenSubmit };
}