Skip to Content

Step 4: Auth state events

⏱ 3 min

React to authentication state changes in real-time


Auth State Changed Event

transcodes.on('AUTH_STATE_CHANGED', (payload) => { if (payload.isAuthenticated) { console.log('Member signed in:', payload.member?.email); } else { console.log('Member signed out'); } });

This image shows the TypeScript definitions (.d.ts file) that enable type-safe programming with the framework:

Installation Guide with Event Listeners


Event Payload

{ isAuthenticated: boolean; accessToken: string | null; expiresAt: number | null; member: Member | null; }

All Available Events

EventWhen FiredPayload (summary)
AUTH_STATE_CHANGEDLogin, logout, or initial auth check{ isAuthenticated, member, ... }
TOKEN_REFRESHEDAccess token automatically renewed{ accessToken, expiresAt }
TOKEN_EXPIREDToken expired (before refresh){ expiredAt }
ERRORAuthentication error occurred{ code, message, context? }

Framework Examples

import { useState, useEffect } from 'react'; function useAuth() { const [member, setMember] = useState(null); const [isAuthenticated, setIsAuthenticated] = useState(false); useEffect(() => { const handleAuthChange = (payload) => { setIsAuthenticated(payload.isAuthenticated); setMember(payload.member || null); }; transcodes.on('AUTH_STATE_CHANGED', handleAuthChange); return () => { transcodes.off('AUTH_STATE_CHANGED', handleAuthChange); }; }, []); return { member, isAuthenticated }; } // Usage function App() { const { member, isAuthenticated } = useAuth(); return ( <div> {isAuthenticated ? <p>Welcome, {member?.email}!</p> : <p>Please sign in</p>} </div> ); }

Check Current Auth Status

async function checkAuth() { const isAuth = await transcodes.token.isAuthenticated(); if (isAuth) { const member = await transcodes.token.getCurrentMember(); console.log('Current member:', member); } }

Sign Out

await transcodes.token.signOut(); // AUTH_STATE_CHANGED event will fire with isAuthenticated: false

History Log

Record actions for audit logs using trackUserAction(). Events appear in the Audit Logs panel

// Login success if (result.success) { await transcodes.trackUserAction({ tag: 'user:login', status: true, metadata: { method: 'passkey' }, }); } // Sign out await transcodes.trackUserAction({ tag: 'user:logout', status: true, });
TagUse Case
user:loginMember logged in (audit tag)
user:logoutMember signed out (audit tag)
user:registerNew member registration (audit tag)

See Audit API for full trackUserAction reference


What’s Next

Last updated on