# Logout Debugging - Quick Reference ## 🚀 Quick Deploy ```bash cd /data/app/igny8 ./scripts/deploy-logout-debugging.sh ``` ## 🔍 What to Watch ### Console Logs (Every 30 seconds) ``` [TokenMonitor] â„šī¸ Access token: 45 minutes until expiry [TokenMonitor] â„šī¸ Refresh token: 19 days, 12 hours until expiry ``` ### When Logout Happens ``` [LogoutTracker] 🚨 Logout triggered [LogoutTracker] Type: TOKEN_EXPIRED [LogoutTracker] Message: [Exact reason] [LogoutTracker] Idle time: 23 minutes ``` ## đŸ› ī¸ Debug Tools ### Debug Panel - **Open:** Press `Ctrl+Shift+D` or click 🔍 button - **Shows:** Auth status, token expiry, recent logouts - **Action:** "Log Full State to Console" button ### Browser Console Commands ```javascript // Get token status window.__tokenMonitor.getTokenStatus() // Get logout history JSON.parse(localStorage.getItem('logout_history') || '[]') // Get last logout reason sessionStorage.getItem('last_logout_reason') // Check auth state JSON.parse(localStorage.getItem('auth-storage')) ``` ### Backend Logs ```bash # Watch for logout events docker logs -f igny8-backend | grep "LOGOUT EVENT" # Check all auth activity docker logs igny8-backend | grep -E "LOGOUT|TOKEN|AUTH" ``` ## 📊 What Data Tells Us ### If `Type: TOKEN_EXPIRED` - Token actually expired OR - Code incorrectly checking expiry - **Check:** Token status in logs - was it really expired? ### If `Type: REFRESH_FAILED` - Refresh endpoint returned 401 - RefreshToken model rejecting valid token OR - Backend bug - **Check:** Backend logs for refresh endpoint errors ### If `Type: AUTH_ERROR` - 403/402 error triggered logout (shouldn't happen) - Error classification bug in api-new.ts - **Check:** Network tab for failed API calls before logout ### If `Type: UNKNOWN` - JavaScript error OR - Browser extension OR - Multi-tab coordination issue - **Check:** Console for JS errors, test in incognito ## âąī¸ Expected Timeline ### With Remember Me = True: ``` T+0: Login → Access: 60min, Refresh: 20d T+60min: Auto-refresh → Access: 60min, Refresh: ~19d 23h T+120min: Auto-refresh → Access: 60min, Refresh: ~19d 22h ...continues until refresh token expires after 20 days... T+20d: Logout → Type: REFRESH_FAILED ``` ### Bug Scenario (What We're Debugging): ``` T+0: Login → Access: 60min, Refresh: 20d T+25min: 🚨 LOGOUT → Access: 35min left, Refresh: 19d 23h left ^ This is the bug! Tokens still valid but logout occurred ``` ## đŸŽ¯ Critical Data Points When logout happens, capture: 1. **Type:** USER_ACTION | TOKEN_EXPIRED | REFRESH_FAILED | AUTH_ERROR | UNKNOWN 2. **Idle Minutes:** How long user was inactive 3. **Access Token Status:** Time remaining (from TokenMonitor logs) 4. **Refresh Token Status:** Time remaining (from TokenMonitor logs) 5. **Location:** Which page user was on 6. **Last API Call:** Check Network tab 7. **Console Errors:** Any JavaScript errors 8. **Backend Logs:** What backend received ## 📍 Where to Find Data | Data Point | Location | |------------|----------| | Token status logs | Browser Console (every 30s) | | Logout event details | Browser Console (when logout) | | Visual alert | Modal overlay (3 sec before redirect) | | Logout reason | Signin page banner | | Backend logs | `docker logs igny8-backend` | | Logout history | Debug Panel (Ctrl+Shift+D) | | Full state | Debug Panel → "Log Full State" | ## 🔧 Common Issues ### No console logs? ```javascript // Check if monitor started window.__tokenMonitor // Should return: TokenExpiryMonitor { ... } ``` ### No alert before logout? ```javascript // Check if tracker loaded localStorage.getItem('logout_history') // Should return: JSON array ``` ### Backend not receiving events? ```bash # Test endpoint curl -X POST http://localhost:8000/api/v1/auth/logout-event/ \ -H "Content-Type: application/json" \ -d '{"type":"TEST","message":"test"}' ``` ### No banner on signin page? ```javascript // Check if reason stored sessionStorage.getItem('last_logout_reason') // Should return: JSON object after logout ``` ## 📝 Test Procedure 1. **Login** with "Remember me for 20 days" checked 2. **Open** Browser DevTools (F12) → Console tab 3. **Verify** Token monitor logs every 30 seconds 4. **Wait** 25+ minutes (can minimize, but keep tab open) 5. **Watch** for logout event in console 6. **Capture** all data: - Console screenshot - Network tab screenshot - Backend logs: `docker logs igny8-backend | tail -50` 7. **Check** signin page for logout banner 8. **Analyze** collected data to identify root cause ## 📞 Support Data Export If issue persists, export: ```javascript // 1. Token status copy(JSON.stringify(window.__tokenMonitor.getTokenStatus(), null, 2)) // 2. Logout history copy(localStorage.getItem('logout_history')) // 3. Last logout reason copy(sessionStorage.getItem('last_logout_reason')) // 4. Full auth state copy(localStorage.getItem('auth-storage')) ``` ```bash # 5. Backend logs docker logs igny8-backend > backend-logs.txt ``` ## 🎉 Success Criteria After identifying root cause and fixing: - [x] User logs in with remember_me=true - [x] User can idle for 25+ minutes without logout - [x] Access token auto-refreshes after 1 hour - [x] Logout only occurs at 20 days (refresh token expiry) - [x] Console logs confirm: "Access: 35min, Refresh: 19d 23h" at T+25min - [x] No unexpected logout events in history --- **Full Documentation:** See `LOGOUT-DEBUGGING-COMPLETE-SUMMARY.md` **Deployment Guide:** See `LOGOUT-DEBUGGING-DEPLOYMENT.md`