Compare commits

...

2 Commits

2 changed files with 31 additions and 10 deletions

View File

@@ -41,22 +41,35 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
checkAuth();
}, []);
const normalizeProfilePayload = (payload: any): { user: User | null; organizations: Organization[] } => {
const organizations = payload?.organizations || [];
if (payload?.user) {
return { user: payload.user as User, organizations };
}
if (payload?.id && payload?.email && payload?.name) {
return {
user: {
id: payload.id,
email: payload.email,
name: payload.name,
},
organizations,
};
}
return { user: null, organizations };
};
const checkAuth = async () => {
try {
setIsLoading(true);
const hasSession = document.cookie.includes('accessToken');
if (!hasSession) {
console.log('No session → skipping auth check');
return;
}
const response = await authApi.getProfile();
if (response.success) {
const userData = response.data.user;
const orgs = response.data.organizations || [];
const { user: userData, organizations: orgs } = normalizeProfilePayload(response.data);
setUser(userData);
setOrganizations(orgs);
@@ -65,9 +78,12 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
if (storedOrgId && orgs.length > 0) {
const org = orgs.find(o => o.id === storedOrgId);
if (org) setCurrentOrganization(org);
} else if (orgs.length === 1) {
else setCurrentOrganization(null);
} else if (orgs.length === 1 && userData) {
setCurrentOrganization(orgs[0]);
localStorage.setItem('currentOrganizationId', orgs[0].id);
} else {
setCurrentOrganization(null);
}
}
} catch (err) {

View File

@@ -10,6 +10,11 @@ export function middleware(request: NextRequest) {
const token = request.cookies.get('accessToken')?.value;
const isAuthenticated = !!token;
// If a logged-in user opens home, send them to dashboard.
if (isAuthenticated && pathname === '/') {
return NextResponse.redirect(new URL('/today', request.url));
}
// Always allow public routes first
if (publicRoutes.includes(pathname)) {
// If user is already logged in and tries to access login/register → redirect to dashboard