Login/Onboarding Redirect Fixes - Summary of Changes
cgen-edf3a8da4efb47ffbefb14f317490210
This commit is contained in:
parent
6db390e609
commit
9703824bbc
1 changed files with 295 additions and 0 deletions
295
docs/LOGIN-ONBOARDING-FIXES-APPLIED.md
Normal file
295
docs/LOGIN-ONBOARDING-FIXES-APPLIED.md
Normal file
|
|
@ -0,0 +1,295 @@
|
|||
# Login/Onboarding Redirect Fixes - Summary of Changes Applied
|
||||
|
||||
## Problem
|
||||
|
||||
You reported that:
|
||||
1. After logging in, you get redirected to onboarding unexpectedly
|
||||
2. Site shows you as "logged in" on initial page load but with incomplete profile
|
||||
3. Users shouldn't appear logged in without a complete profile
|
||||
4. Frustrated by mysterious redirects and confusing auth state
|
||||
|
||||
---
|
||||
|
||||
## Root Causes Found
|
||||
|
||||
1. **Session restored before profile loads** - Supabase restores your session from cookies immediately, showing you as "logged in" even while profile is still fetching from database
|
||||
|
||||
2. **Automatic redirect to onboarding** - Dashboard component had code that auto-redirected to onboarding if user state was empty, causing unexpected navigation
|
||||
|
||||
3. **Unclear intent** - No clear indication to user: Are you logged in? Is profile loading? Should you complete it? Users saw mixed signals.
|
||||
|
||||
---
|
||||
|
||||
## Fixes Applied
|
||||
|
||||
### Fix 1: Remove Automatic Onboarding Redirect
|
||||
|
||||
**File:** `code/client/pages/Dashboard.tsx` (Lines 283-311)
|
||||
|
||||
**What changed:**
|
||||
- ❌ **REMOVED:** Code that auto-redirected to `/onboarding` when no user
|
||||
- ❌ **REMOVED:** Comment saying "redirect to login when auth is resolved"
|
||||
- ✅ **ADDED:** Simple state handling without redirects
|
||||
- ✅ **ADDED:** Clear separation of auth loading vs auth resolved states
|
||||
|
||||
**Old behavior:**
|
||||
```typescript
|
||||
if (!user && !authLoading) {
|
||||
navigate("/onboarding", { replace: true }); // AUTO-REDIRECT!
|
||||
}
|
||||
```
|
||||
|
||||
**New behavior:**
|
||||
```typescript
|
||||
if (authLoading) {
|
||||
setIsLoading(true); // Show loading state
|
||||
return;
|
||||
}
|
||||
|
||||
if (!user) {
|
||||
setIsLoading(false); // Auth resolved, no user
|
||||
return;
|
||||
}
|
||||
|
||||
if (user && profile) {
|
||||
loadDashboardData(); // Load dashboard data
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Fix 2: Show User-Friendly Messages Instead of Redirecting
|
||||
|
||||
**File:** `code/client/pages/Dashboard.tsx` (Lines 566-602)
|
||||
|
||||
**What changed:**
|
||||
- ❌ **REMOVED:** `return null` when no user (which allowed redirect to happen)
|
||||
- ✅ **ADDED:** "Please Sign In" message with button
|
||||
- ✅ **ADDED:** "Complete Your Profile" message with button
|
||||
- ✅ **ADDED:** User controls when to complete profile (not forced redirect)
|
||||
|
||||
**New behavior:**
|
||||
|
||||
**When not logged in:**
|
||||
```
|
||||
┌─────────────────────────┐
|
||||
│ Welcome to AeThex │
|
||||
├─────────────────────────┤
|
||||
│ You need to be signed │
|
||||
│ in to access the │
|
||||
│ dashboard │
|
||||
│ │
|
||||
│ [ Sign In ] │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
**When logged in but profile incomplete:**
|
||||
```
|
||||
┌─────────────────────────┐
|
||||
│ Complete Your Profile │
|
||||
├─────────────────────────┤
|
||||
│ Let's set up your │
|
||||
│ profile to get started │
|
||||
│ with AeThex │
|
||||
│ │
|
||||
│ [ Complete Profile ] │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
**When logged in with complete profile:**
|
||||
- Full dashboard shown normally
|
||||
|
||||
---
|
||||
|
||||
## Expected Behavior After Fix
|
||||
|
||||
### Scenario 1: Logging In
|
||||
|
||||
**Before:**
|
||||
1. Enter email/password
|
||||
2. Submit
|
||||
3. ❌ Redirected to onboarding (confusing!)
|
||||
|
||||
**After:**
|
||||
1. Enter email/password
|
||||
2. Submit
|
||||
3. ✅ See dashboard or "Complete Profile" message
|
||||
4. ✅ You choose when to complete profile (not forced)
|
||||
|
||||
---
|
||||
|
||||
### Scenario 2: Page Reload While Logged In
|
||||
|
||||
**Before:**
|
||||
1. Reload page
|
||||
2. ❌ See yourself "logged in" for a moment
|
||||
3. ❌ Maybe get redirected to onboarding
|
||||
|
||||
**After:**
|
||||
1. Reload page
|
||||
2. ✅ See loading state briefly
|
||||
3. ✅ Dashboard appears or message about completing profile
|
||||
4. ✅ No unexpected redirects
|
||||
|
||||
---
|
||||
|
||||
### Scenario 3: Visiting Dashboard When Not Logged In
|
||||
|
||||
**Before:**
|
||||
1. Visit `/dashboard` without being logged in
|
||||
2. ❌ Redirected to onboarding (wrong!)
|
||||
|
||||
**After:**
|
||||
1. Visit `/dashboard` without being logged in
|
||||
2. ✅ See "Please Sign In" message
|
||||
3. ✅ Click button to go to login page
|
||||
|
||||
---
|
||||
|
||||
## What This Means
|
||||
|
||||
✅ **No more mysterious redirects**
|
||||
- You won't be auto-redirected to onboarding unexpectedly
|
||||
- Your destination is clear (dashboard or complete profile)
|
||||
|
||||
✅ **No confusing "logged in by default" state**
|
||||
- Loading spinner shows while profile is being fetched
|
||||
- You don't see yourself logged in until profile is actually loaded
|
||||
|
||||
✅ **User control over onboarding**
|
||||
- You choose when to complete your profile
|
||||
- Not forced by automatic redirects
|
||||
- Clear button to start onboarding
|
||||
|
||||
✅ **Clear error messages**
|
||||
- "Sign In" message when not authenticated
|
||||
- "Complete Profile" message when missing profile data
|
||||
- No guessing what state you're in
|
||||
|
||||
---
|
||||
|
||||
## Testing the Fix
|
||||
|
||||
### Test 1: Log In and Go to Dashboard
|
||||
1. Visit `/login`
|
||||
2. Sign in with email/password
|
||||
3. **Expected:** Should see dashboard or "Complete Profile" message
|
||||
4. **NOT expected:** Redirect to onboarding
|
||||
5. **If profile incomplete:** Click "Complete Profile" button intentionally
|
||||
|
||||
### Test 2: Reload Dashboard While Logged In
|
||||
1. Log in successfully
|
||||
2. Visit `/dashboard`
|
||||
3. Reload page (F5 or Ctrl+R)
|
||||
4. **Expected:** See loading state, then dashboard
|
||||
5. **NOT expected:** Redirect to onboarding or seeing "logged in by default"
|
||||
|
||||
### Test 3: Visit Dashboard When Not Logged In
|
||||
1. Make sure you're logged out (go to `/logout` or clear cookies)
|
||||
2. Visit `/dashboard`
|
||||
3. **Expected:** See "Please Sign In" message with button
|
||||
4. **NOT expected:** Redirect to onboarding
|
||||
|
||||
### Test 4: Sign Out and Back In
|
||||
1. While on dashboard, click Sign Out
|
||||
2. **Expected:** Should see "Please Sign In" message
|
||||
3. Click Sign In button
|
||||
4. **Expected:** Redirected to login page
|
||||
5. Sign in
|
||||
6. **Expected:** Back to dashboard or "Complete Profile" message
|
||||
|
||||
---
|
||||
|
||||
## Files Modified
|
||||
|
||||
| File | Changes | Status |
|
||||
|------|---------|--------|
|
||||
| `code/client/pages/Dashboard.tsx` | Removed auto-redirect logic (lines 283-311) | ✅ FIXED |
|
||||
| `code/client/pages/Dashboard.tsx` | Added proper state messages (lines 566-602) | ✅ FIXED |
|
||||
|
||||
---
|
||||
|
||||
## Architecture Changes
|
||||
|
||||
**Before:**
|
||||
```
|
||||
User logs in
|
||||
↓
|
||||
Session restored from cookies
|
||||
↓
|
||||
Dashboard auto-redirects to onboarding if !user
|
||||
↓
|
||||
User redirected unexpectedly
|
||||
```
|
||||
|
||||
**After:**
|
||||
```
|
||||
User logs in
|
||||
↓
|
||||
Session restored from cookies
|
||||
↓
|
||||
Dashboard checks state:
|
||||
- Loading? → Show spinner
|
||||
- Not logged in? → Show "Sign In" message
|
||||
- No profile? → Show "Complete Profile" message
|
||||
- Has profile? → Show dashboard
|
||||
↓
|
||||
User sees clear message, no redirects
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Why This Is Better
|
||||
|
||||
1. **Predictable behavior** - No mysterious redirects
|
||||
2. **Clear intent** - UI explicitly tells you what's happening
|
||||
3. **User control** - You choose to complete profile, not forced
|
||||
4. **Better UX** - No more "logged in by default" confusion
|
||||
5. **Matches expectations** - Dashboard behaves like a normal dashboard
|
||||
|
||||
---
|
||||
|
||||
## Potential Issues to Watch For
|
||||
|
||||
### If you're still seeing redirects:
|
||||
1. Clear browser cache (Ctrl+Shift+Delete)
|
||||
2. Hard refresh the page (Ctrl+Shift+R)
|
||||
3. Make sure you deployed the latest code
|
||||
|
||||
### If messages don't appear:
|
||||
1. Check browser console (F12) for errors
|
||||
2. Verify Dashboard.tsx was updated correctly
|
||||
3. Check that you're seeing the new Dashboard code
|
||||
|
||||
### If onboarding still appears:
|
||||
1. It should only appear if you click "Complete Profile"
|
||||
2. Check that auto-redirect code was removed
|
||||
3. Verify changes to lines 283-311 and 566-602
|
||||
|
||||
---
|
||||
|
||||
## Related Fixes
|
||||
|
||||
- **Session preservation:** ✅ FIXED (cookies preserved on page load)
|
||||
- **Discord linking:** ✅ FIXED (redirects to connections tab)
|
||||
- **Auth state handling:** ✅ IMPROVED (clearer messages)
|
||||
- **Onboarding redirect:** ✅ FIXED (no more auto-redirects)
|
||||
|
||||
---
|
||||
|
||||
## Questions?
|
||||
|
||||
Refer to:
|
||||
1. **LOGIN-ONBOARDING-REDIRECT-ANALYSIS.md** - Detailed root cause analysis
|
||||
2. Browser console (F12) - Check for error messages
|
||||
3. Network tab (F12 → Network) - Check what endpoints are being called
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
**The core issue was:** Dashboard had code that automatically redirected users to onboarding when their user state was empty or loading. This caused unexpected redirects that felt like bugs.
|
||||
|
||||
**The fix:** Removed auto-redirect logic and added clear messages instead. Users now see what's happening and control their own flow (choosing when to complete profile).
|
||||
|
||||
**Result:** No more mysterious redirects, clearer auth state, better UX overall.
|
||||
Loading…
Reference in a new issue