Skip to main content
Clears user identity, attributes, cached entitlements, and signal queue. Generates a new anonymous ID.
reset() clears all user data including provisional entitlements that haven’t been verified. Use this when users log out or switch accounts.

Signature

function reset(): void

Parameters

None

Return Value

Type: void

What Gets Cleared

When you call reset():
  1. User identity (returns to anonymous)
  2. All user attributes
  3. Cached entitlements (provisional and verified)
  4. Queued grant signals
  5. Generates new anonymous UUID

Examples

Basic Reset

import Encore from '@encore/web-sdk';

Encore.reset();

After Logout

function handleLogout() {
  // Clear your app's session
  clearAppSession();
  
  // Reset Encore
  Encore.reset();
  
  // Redirect to login
  window.location.href = '/login';
}

Account Switching

async function switchAccount(newUserId) {
  // Clear previous user data
  Encore.reset();
  
  // Load new user
  const user = await loadUserData(newUserId);
  
  // Identify new user
  Encore.identify(user.id, {
    email: user.email,
    subscriptionTier: user.subscription
  });
}

Framework Integration

  • React
  • Vue
  • Angular
import Encore from '@encore/web-sdk';
import { useAuth } from './hooks/useAuth';

function LogoutButton() {
  const { logout } = useAuth();
  
  const handleLogout = async () => {
    // Clear app state
    await logout();
    
    // Reset Encore
    Encore.reset();
    
    // Redirect
    window.location.href = '/login';
  };
  
  return (
    <button onClick={handleLogout}>
      Logout
    </button>
  );
}

When to Call reset()

1

User Logout

When a user logs out of your application:
function logout() {
  clearUserSession();
  Encore.reset();
  redirectToLogin();
}
2

Account Switching

When switching between different user accounts:
async function switchUser(newUserId) {
  Encore.reset();
  await loadNewUser(newUserId);
  Encore.identify(newUserId);
}
3

Testing/Development

During testing to start with a clean slate:
// In test setup
beforeEach(() => {
  Encore.reset();
});
4

Privacy Compliance

When users request data deletion:
function handleDataDeletion() {
  await deleteUserDataFromBackend();
  Encore.reset();
}

After Reset

After calling reset():
  • A new anonymous UUID is generated
  • The user has no entitlements
  • All cached data is cleared
  • You can call identify() again with a different user
// Reset to anonymous
Encore.reset();

// New anonymous ID generated
console.log(Encore.getCurrentUserId()); // New UUID

// No entitlements
console.log(Encore.isActive({ type: 'freeTrial' })); // false

// Can identify a new user
Encore.identify('new-user-456');

Complete Example

import Encore from '@encore/web-sdk';

class AuthManager {
  async logout() {
    try {
      // 1. Clear app session
      await this.clearServerSession();
      this.clearLocalStorage();
      
      // 2. Reset Encore SDK
      Encore.reset();
      
      // 3. Clear app state
      this.clearAppState();
      
      // 4. Redirect
      window.location.href = '/login';
    } catch (error) {
      console.error('Logout failed:', error);
    }
  }
  
  async switchAccount(newUserId) {
    try {
      // 1. Reset current user
      Encore.reset();
      
      // 2. Switch server session
      await this.switchServerSession(newUserId);
      
      // 3. Load new user data
      const user = await this.loadUserData(newUserId);
      
      // 4. Identify new user with Encore
      Encore.identify(user.id, {
        email: user.email,
        subscriptionTier: user.subscription
      });
      
      // 5. Update app state
      this.updateAppState(user);
    } catch (error) {
      console.error('Account switch failed:', error);
    }
  }
  
  clearLocalStorage() {
    localStorage.removeItem('authToken');
    localStorage.removeItem('userId');
    localStorage.removeItem('userData');
  }
  
  clearAppState() {
    // Clear your app's state management
    store.dispatch({ type: 'LOGOUT' });
  }
}

// Usage
const auth = new AuthManager();

// Logout
await auth.logout();

// Switch accounts
await auth.switchAccount('different-user-789');

Best Practices

1. Reset Before Switching Users

Always reset when changing users:
// Good
async function switchUser(newUserId) {
  Encore.reset();  // ✅ Clear old user first
  Encore.identify(newUserId);
}

// Avoid
function switchUser(newUserId) {
  Encore.identify(newUserId);  // ❌ Old data might persist
}

2. Clear App State Too

Reset both Encore and your app:
// Good
function logout() {
  clearAppState();     // ✅ Clear app first
  Encore.reset();      // ✅ Then Encore
  redirectToLogin();
}

3. Handle Errors Gracefully

async function safeLogout() {
  try {
    await clearServerSession();
  } catch (error) {
    console.error('Server logout failed:', error);
  } finally {
    // Always reset locally
    Encore.reset();
    redirectToLogin();
  }
}

4. Don’t Reset on Page Refresh

Only reset on explicit logout:
// Good: On explicit logout
logoutButton.addEventListener('click', () => {
  Encore.reset();
});

// Avoid: On page load
window.addEventListener('load', () => {
  Encore.reset();  // ❌ Would lose data on refresh
});

Troubleshooting

Expected behavior: reset() clears all entitlements by design.Solution:
  • Don’t call reset() on page refresh
  • Only call on explicit logout or account switch
  • Entitlements will be restored when user logs back in and presents another offer
Symptom: getCurrentUserId() returns same ID after resetSolution:
  • Ensure SDK is properly initialized
  • Check browser console for errors
  • Try hard refresh (clear cache)
  • Verify you’re not calling identify() immediately after reset

Next Steps

After resetting: