Files
lcbp3/frontend/components/auth/auth-sync.tsx
T
admin 83b04773f7
CI / CD Pipeline / build (push) Successful in 22m43s
CI / CD Pipeline / deploy (push) Successful in 9m11s
690401:0842 fix setting pagre
2026-04-01 08:42:53 +07:00

53 lines
1.8 KiB
TypeScript

'use client';
import { useSession, signOut } from 'next-auth/react';
import { useEffect } from 'react';
import { useAuthStore } from '@/lib/stores/auth-store';
import { clearAuthTokenCache } from '@/lib/api/client';
export function AuthSync() {
const { data: session, status } = useSession();
const { setAuth, logout } = useAuthStore();
useEffect(() => {
if (session?.error === 'RefreshAccessTokenError') {
clearAuthTokenCache(); // Clear cached token on auth error
signOut({ callbackUrl: '/login' });
} else if (status === 'authenticated' && session?.user) {
// Map NextAuth session to AuthStore user
// Assuming session.user has the fields we need based on types/next-auth.d.ts
// Map NextAuth session user to AuthStore user type
const user = session.user as {
id?: string;
user_id?: string;
username?: string;
email?: string;
firstName?: string;
lastName?: string;
role?: string;
permissions?: string[];
};
setAuth(
{
id: user.id || user.user_id || '',
publicId: session.user.publicId, // ✅ ADR-019
username: user.username || session.user.username || '',
email: user.email || session.user.email || '',
firstName: user.firstName || session.user.firstName || '',
lastName: user.lastName || session.user.lastName || '',
role: user.role || session.user.role || 'User',
permissions: user.permissions,
},
(session as { accessToken?: string }).accessToken || ''
);
} else if (status === 'unauthenticated') {
clearAuthTokenCache(); // Clear cached token on logout
logout();
}
}, [session, status, setAuth, logout]);
return null; // This component renders nothing
}