ai-helpdesk-api / Frontend /src /pages /AuthCallback.jsx
ritesh19180's picture
Upload folder using huggingface_hub
f363b19 verified
Raw
History Blame Contribute Delete
2.54 kB
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
import useAuthStore from "../store/authStore";
import { supabase } from "../lib/supabaseClient";
function AuthCallback() {
const navigate = useNavigate();
const { getProfile } = useAuthStore();
useEffect(() => {
const handleCallback = async () => {
try {
// Retrieve the current session to ensure the user is logged in
const { data: { session }, error } = await supabase.auth.getSession();
if (error) throw error;
const user = session?.user;
if (!user) {
throw new Error("No user session found");
}
// Fetch/sync user profile
const profile = await getProfile(user);
if (!profile) {
throw new Error("Failed to retrieve user profile");
}
// Redirect based on role and status
if (profile.status === "active") {
if (profile.role === "master_admin") {
navigate("/master-admin/dashboard", { replace: true });
} else if (profile.role === "admin" || profile.role === "super_admin") {
navigate("/admin/dashboard", { replace: true });
} else if (profile.role === "user") {
navigate("/dashboard", { replace: true });
} else {
navigate("/dashboard", { replace: true });
}
} else if (profile.status === "pending_approval") {
if (profile.role === "admin") {
navigate("/admin-lobby", { replace: true });
} else if (profile.role === "user") {
navigate("/user-lobby", { replace: true });
} else {
navigate("/user-lobby", { replace: true });
}
} else if (profile.status === "rejected") {
navigate("/not-approved", { replace: true });
} else {
navigate("/dashboard", { replace: true });
}
} catch (err) {
console.error("Error in OAuth callback processing:", err);
navigate("/login", { replace: true });
}
};
handleCallback();
}, [navigate, getProfile]);
return (
<div className="flex h-screen w-screen flex-col items-center justify-center bg-white dark:bg-gray-900 transition-colors duration-200">
<div className="h-12 w-12 animate-spin rounded-full border-4 border-emerald-600 border-t-transparent"></div>
<p className="mt-4 text-lg font-medium text-gray-600 dark:text-gray-300">Signing you in...</p>
</div>
);
}
export default AuthCallback;