admin area
This commit is contained in:
72
apps/website/lib/gateways/AuthGuard.tsx
Normal file
72
apps/website/lib/gateways/AuthGuard.tsx
Normal file
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Component: AuthGuard
|
||||
*
|
||||
* Protects routes that require authentication but not specific roles.
|
||||
* Uses the same Gateway pattern for consistency.
|
||||
*/
|
||||
|
||||
'use client';
|
||||
|
||||
import { ReactNode } from 'react';
|
||||
import { RouteGuard } from './RouteGuard';
|
||||
|
||||
interface AuthGuardProps {
|
||||
children: ReactNode;
|
||||
/**
|
||||
* Path to redirect to if not authenticated
|
||||
*/
|
||||
redirectPath?: string;
|
||||
/**
|
||||
* Custom loading component (optional)
|
||||
*/
|
||||
loadingComponent?: ReactNode;
|
||||
/**
|
||||
* Custom unauthorized component (optional)
|
||||
*/
|
||||
unauthorizedComponent?: ReactNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* AuthGuard Component
|
||||
*
|
||||
* Protects child components requiring authentication.
|
||||
*
|
||||
* Usage:
|
||||
* ```tsx
|
||||
* <AuthGuard>
|
||||
* <ProtectedPage />
|
||||
* </AuthGuard>
|
||||
* ```
|
||||
*/
|
||||
export function AuthGuard({
|
||||
children,
|
||||
redirectPath = '/auth/login',
|
||||
loadingComponent,
|
||||
unauthorizedComponent,
|
||||
}: AuthGuardProps) {
|
||||
return (
|
||||
<RouteGuard
|
||||
config={{
|
||||
requiredRoles: [], // Any authenticated user
|
||||
redirectOnUnauthorized: true,
|
||||
unauthorizedRedirectPath: redirectPath,
|
||||
}}
|
||||
loadingComponent={loadingComponent}
|
||||
unauthorizedComponent={unauthorizedComponent}
|
||||
>
|
||||
{children}
|
||||
</RouteGuard>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* useAuth Hook
|
||||
*
|
||||
* Simplified hook for checking authentication status.
|
||||
*
|
||||
* Usage:
|
||||
* ```tsx
|
||||
* const { isAuthenticated, loading } = useAuth();
|
||||
* ```
|
||||
*/
|
||||
export { useRouteGuard as useAuthAccess } from './RouteGuard';
|
||||
Reference in New Issue
Block a user