Files
retail/AUTO_LOGIN_DEBUG.md
Phuoc Nguyen 63e397d7e6 aaa
2025-10-10 18:06:40 +07:00

218 lines
5.0 KiB
Markdown

# Auto-Login Debug Guide
**Date**: October 10, 2025
---
## Testing Auto-Login
### Test Scenario
1. **Login with Remember Me CHECKED**
2. **Close app completely** (swipe from recent apps)
3. **Reopen app**
4. **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
```bash
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
```bash
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
```bash
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:
```dart
@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
```bash
# 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:
1. **On Login**: If Remember Me = true → Save token to SecureStorage
2. **On App Start**: Check SecureStorage for token
3. **If Token Found**: Load it, set in DioClient, fetch profile → Auto-login
4. **If No Token**: Show LoginPage
Use the debug logs above to trace exactly what's happening and identify any issues! 🚀