5.0 KiB
5.0 KiB
Auto-Login Debug Guide
Date: October 10, 2025
Testing Auto-Login
Test Scenario
- Login with Remember Me CHECKED
- Close app completely (swipe from recent apps)
- Reopen app
- Expected: Should auto-login and go to MainScreen
Debug Logs to Watch
When you reopen the app, you should see these logs:
Step 1: App Starts
🚀 Initializing auth state...
Step 2: Check for Saved Token
🔍 Checking authentication...
🔍 Has token in storage: true/false
If Token Found (Remember Me was checked):
🔍 Has token in storage: true
🔍 Token retrieved, length: 200+
✅ Token loaded from storage and set in DioClient
🚀 isAuthenticated result: true
🚀 Token found, fetching user profile...
📡 DataSource: Calling profile API...
✅ Profile loaded: Admin User
✅ Initialize complete: isAuthenticated=true
AuthWrapper build: isAuthenticated=true, isLoading=false
Result: ✅ Auto-login success → Shows MainScreen
If No Token (Remember Me was NOT checked):
🔍 Has token in storage: false
❌ No token found in storage
🚀 isAuthenticated result: false
❌ No token found, user needs to login
AuthWrapper build: isAuthenticated=false, isLoading=false
Result: ✅ Shows LoginPage (expected behavior)
How to Test
Test 1: Remember Me ON → Auto-Login
1. flutter run
2. Login with Remember Me CHECKED ✅
3. Verify you see:
🔐 Repository: Token saved to secure storage (persistent)
4. Hot restart (press 'R' in terminal)
5. Should see auto-login logs
6. Should go directly to MainScreen
Test 2: Remember Me OFF → Must Login Again
1. Logout from Settings
2. Login with Remember Me UNCHECKED ❌
3. Verify you see:
🔐 Repository: Token NOT saved (session only)
4. Hot restart (press 'R' in terminal)
5. Should see:
🔍 Has token in storage: false
6. Should show LoginPage
Test 3: Full App Restart
1. Login with Remember Me CHECKED
2. Close app completely (swipe from recent apps)
3. Reopen app
4. Should auto-login
Common Issues
Issue 1: "Has token in storage: false" even after login with Remember Me
Possible causes:
- Backend returned error during login
- Remember Me checkbox wasn't actually checked
- Hot reload instead of hot restart (use 'R' not 'r')
Fix:
- Check login logs show:
Token saved to secure storage (persistent) - Use hot restart ('R') not hot reload ('r')
Issue 2: Token found but profile fails
Logs:
🔍 Has token in storage: true
✅ Token loaded from storage
🚀 Token found, fetching user profile...
❌ Failed to get profile: [error message]
Possible causes:
- Token expired
- Backend not running
- Network error
Fix:
- Check backend is running
- Token might have expired (login again)
Issue 3: Initialize never called
Symptom: No 🚀 Initializing auth state... log on app start
Cause: initialize() not called in app.dart
Fix: Verify app.dart has:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
ref.read(authProvider.notifier).initialize();
});
}
Expected Log Flow
On First App Start (No Token)
🚀 Initializing auth state...
🔍 Checking authentication...
🔍 Has token in storage: false
❌ No token found in storage
🚀 isAuthenticated result: false
❌ No token found, user needs to login
AuthWrapper build: isAuthenticated=false, isLoading=false
→ Shows LoginPage
After Login (Remember Me = true)
REQUEST[POST] => PATH: /auth/login
📡 DataSource: Calling login API...
🔐 Repository: Starting login (rememberMe: true)...
🔐 Repository: Token saved to secure storage (persistent)
✅ Login SUCCESS
✅ State updated: isAuthenticated=true
AuthWrapper build: isAuthenticated=true, isLoading=false
→ Shows MainScreen
On App Restart (Token Saved)
🚀 Initializing auth state...
🔍 Checking authentication...
🔍 Has token in storage: true
🔍 Token retrieved, length: 247
✅ Token loaded from storage and set in DioClient
🚀 isAuthenticated result: true
🚀 Token found, fetching user profile...
REQUEST[GET] => PATH: /auth/profile
📡 DataSource: Response...
✅ Profile loaded: Admin User
✅ Initialize complete: isAuthenticated=true
AuthWrapper build: isAuthenticated=true, isLoading=false
→ Shows MainScreen (AUTO-LOGIN SUCCESS!)
Quick Test Commands
# Test 1: Login with Remember Me
flutter run
# Login with checkbox checked
# Press 'R' to hot restart
# Should auto-login
# Test 2: Login without Remember Me
# Logout first
# Login with checkbox unchecked
# Press 'R' to hot restart
# Should show login page
Summary
The auto-login feature works by:
- On Login: If Remember Me = true → Save token to SecureStorage
- On App Start: Check SecureStorage for token
- If Token Found: Load it, set in DioClient, fetch profile → Auto-login
- If No Token: Show LoginPage
Use the debug logs above to trace exactly what's happening and identify any issues! 🚀