fix: Resolve login redirect loop and authentication conflicts

- Add delay after login to ensure session cookies are set properly
- Fix client-side auth checks in dashboard to handle session refresh gracefully
- Remove conflicting client-side redirects from Navigation component
- All authentication now properly handled by unified server-side auth system

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-13 09:28:24 -06:00
parent 57b23a304c
commit 7fe90e7330
3 changed files with 77 additions and 21 deletions

View File

@@ -359,32 +359,46 @@ if (!auth) {
async function loadEvents() {
try {
// Get current user (auth already verified server-side)
const { data: { user } } = await supabase.auth.getUser();
const { data: { user }, error: userError } = await supabase.auth.getUser();
if (!user) {
// This shouldn't happen due to server-side auth, but handle gracefully
console.error('No user found despite server-side auth');
loading.innerHTML = `
<div class="rounded-xl p-6 max-w-md mx-auto" style="background: var(--error-bg); border: 1px solid var(--error-border);">
<p class="font-medium" style="color: var(--error-color);">Session error</p>
<p class="text-sm mt-2" style="color: var(--error-color); opacity: 0.8;">Please refresh the page</p>
</div>
`;
if (userError || !user) {
// Session might be stale, try to refresh and retry once
console.log('[DASHBOARD] No user session found, attempting to refresh...');
const { data: refreshData, error: refreshError } = await supabase.auth.refreshSession();
if (refreshError || !refreshData?.user) {
// If refresh fails, redirect to login
console.error('Session refresh failed, redirecting to login');
window.location.href = '/login';
return;
}
// Use refreshed user data
console.log('[DASHBOARD] Session refreshed successfully for user:', refreshData.user.id);
}
// Get the actual user object (either original or refreshed)
const currentUser = user || (await supabase.auth.getUser()).data.user;
if (!currentUser) {
console.error('Unable to get user after refresh attempt');
window.location.href = '/login';
return;
}
const { data: userProfile, error: userError } = await supabase
const { data: userProfile, error: userProfileError } = await supabase
.from('users')
.select('organization_id, role')
.eq('id', user.id)
.eq('id', currentUser.id)
.single();
if (userError) {
if (userProfileError) {
// Error loading user profile
loading.innerHTML = `
<div class="rounded-xl p-6 max-w-md mx-auto" style="background: var(--error-bg); border: 1px solid var(--error-border);">
<p class="font-medium" style="color: var(--error-color);">Error loading user profile</p>
<p class="text-sm mt-2" style="color: var(--error-color); opacity: 0.8;">${userError.message || userError}</p>
<p class="text-sm mt-2" style="color: var(--error-color); opacity: 0.8;">${userProfileError.message || userProfileError}</p>
</div>
`;
return;