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

5.0 KiB

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

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:

  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! 🚀