import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../../contexts/AuthContext'; import axios from 'axios'; export default function Login() { const [email, setEmail] = useState(''); // Remove pre-filled email const [password, setPassword] = useState(''); // Remove pre-filled password const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const [authState, setAuthState] = useState({ hasToken: false, hasUser: false, tokenValue: null, userValue: null }); const navigate = useNavigate(); const { login, currentUser } = useAuth(); // Check and display current auth state for debugging useEffect(() => { const token = localStorage.getItem('token'); const user = localStorage.getItem('user'); try { setAuthState({ hasToken: !!token, hasUser: !!user, tokenValue: token ? `${token.substring(0, 10)}...` : null, userValue: user ? JSON.parse(user) : null }); console.log('Login page loaded with auth state:', { hasToken: !!token, hasUser: !!user, currentUser }); } catch (error) { console.error('Error parsing user data:', error); } }, [currentUser]); const handleSubmit = async (e) => { e.preventDefault(); try { setError(''); setLoading(true); console.log('Attempting login with:', { email, password: '***' }); // Try direct API call first try { const response = await axios.post('/api/auth/login', { email, password }); console.log('Login response:', response.data); // Check if the response has the expected structure if (response.data && response.data.success === true) { const { token, user } = response.data; console.log('Extracted token and user:', { tokenExists: !!token, user }); // Save token to localStorage localStorage.setItem('token', token); // Set axios default headers for future requests axios.defaults.headers.common['Authorization'] = `Bearer ${token}`; // Update auth context manually localStorage.setItem('user', JSON.stringify(user)); console.log('Login successful, redirecting based on role:', user.role); // Force reload to ensure auth context is properly updated window.location.href = '/dashboard'; return; } else { console.error('Unexpected response structure:', response.data); throw new Error('Invalid response structure from server'); } } catch (directApiError) { console.error('Direct API call failed:', directApiError); console.error('Error details:', directApiError.response ? directApiError.response.data : 'No response data'); // If the error is a 401, show appropriate message if (directApiError.response?.status === 401) { setError('Invalid email or password'); return; } throw directApiError; } } catch (error) { setError('Failed to log in. Please check your credentials.'); console.error('Login error:', error); } finally { setLoading(false); } }; return (
Sign in to manage your inventory
© 2025 InInventer. All rights reserved.