5.4 KiB
5.4 KiB
Logout Debugging - Quick Reference
🚀 Quick Deploy
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+Dor click 🔍 button - Shows: Auth status, token expiry, recent logouts
- Action: "Log Full State to Console" button
Browser Console Commands
// 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
# 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:
- Type: USER_ACTION | TOKEN_EXPIRED | REFRESH_FAILED | AUTH_ERROR | UNKNOWN
- Idle Minutes: How long user was inactive
- Access Token Status: Time remaining (from TokenMonitor logs)
- Refresh Token Status: Time remaining (from TokenMonitor logs)
- Location: Which page user was on
- Last API Call: Check Network tab
- Console Errors: Any JavaScript errors
- 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?
// Check if monitor started
window.__tokenMonitor
// Should return: TokenExpiryMonitor { ... }
No alert before logout?
// Check if tracker loaded
localStorage.getItem('logout_history')
// Should return: JSON array
Backend not receiving events?
# 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?
// Check if reason stored
sessionStorage.getItem('last_logout_reason')
// Should return: JSON object after logout
📝 Test Procedure
- Login with "Remember me for 20 days" checked
- Open Browser DevTools (F12) → Console tab
- Verify Token monitor logs every 30 seconds
- Wait 25+ minutes (can minimize, but keep tab open)
- Watch for logout event in console
- Capture all data:
- Console screenshot
- Network tab screenshot
- Backend logs:
docker logs igny8-backend | tail -50
- Check signin page for logout banner
- Analyze collected data to identify root cause
📞 Support Data Export
If issue persists, export:
// 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'))
# 5. Backend logs
docker logs igny8-backend > backend-logs.txt
🎉 Success Criteria
After identifying root cause and fixing:
- User logs in with remember_me=true
- User can idle for 25+ minutes without logout
- Access token auto-refreshes after 1 hour
- Logout only occurs at 20 days (refresh token expiry)
- Console logs confirm: "Access: 35min, Refresh: 19d 23h" at T+25min
- No unexpected logout events in history
Full Documentation: See LOGOUT-DEBUGGING-COMPLETE-SUMMARY.md
Deployment Guide: See LOGOUT-DEBUGGING-DEPLOYMENT.md