feat: add impersonate page to handle session token injection and redirection
This commit is contained in:
41
src/app/impersonate/page.tsx
Normal file
41
src/app/impersonate/page.tsx
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { useEffect, Suspense } from 'react';
|
||||||
|
import { useRouter, useSearchParams } from 'next/navigation';
|
||||||
|
|
||||||
|
function ImpersonateHandler() {
|
||||||
|
const router = useRouter();
|
||||||
|
const searchParams = useSearchParams();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const token = searchParams.get('token');
|
||||||
|
const userStr = searchParams.get('user');
|
||||||
|
const tenantStr = searchParams.get('tenant');
|
||||||
|
|
||||||
|
if (token && userStr && tenantStr) {
|
||||||
|
localStorage.setItem('accessToken', token);
|
||||||
|
localStorage.setItem('user', userStr);
|
||||||
|
localStorage.setItem('tenant', tenantStr);
|
||||||
|
localStorage.setItem('is_impersonating', 'true');
|
||||||
|
router.push('/dashboard');
|
||||||
|
} else {
|
||||||
|
router.push('/login');
|
||||||
|
}
|
||||||
|
}, [router, searchParams]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function ImpersonatePage() {
|
||||||
|
return (
|
||||||
|
<div className="min-h-screen flex items-center justify-center bg-surface-50 dark:bg-surface-900">
|
||||||
|
<div className="text-center">
|
||||||
|
<div className="w-10 h-10 border-4 border-primary-500 border-t-transparent rounded-full animate-spin mx-auto mb-4"></div>
|
||||||
|
<p className="text-surface-600 dark:text-surface-400">Loading impersonation session...</p>
|
||||||
|
</div>
|
||||||
|
<Suspense fallback={null}>
|
||||||
|
<ImpersonateHandler />
|
||||||
|
</Suspense>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user