forked from baron/baron-sso
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { useEffect } from "react";
|
|
import { useAuth } from "react-oidc-context";
|
|
import { useNavigate } from "react-router-dom";
|
|
import { userManager } from "../../lib/auth";
|
|
import { isValidOidcSessionUser } from "../../lib/oidcStorage";
|
|
|
|
export default function AuthCallbackPage() {
|
|
const auth = useAuth();
|
|
const navigate = useNavigate();
|
|
|
|
useEffect(() => {
|
|
// 팝업으로 열린 경우 signinPopupCallback 처리
|
|
if (window.opener) {
|
|
userManager.signinPopupCallback().catch((error) => {
|
|
console.error("Popup callback failed:", error);
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (auth.isAuthenticated && isValidOidcSessionUser(auth.user)) {
|
|
const returnTo =
|
|
typeof auth.user?.state === "object" &&
|
|
auth.user?.state !== null &&
|
|
"returnTo" in auth.user.state &&
|
|
typeof auth.user.state.returnTo === "string"
|
|
? auth.user.state.returnTo
|
|
: "/clients";
|
|
navigate(returnTo, { replace: true });
|
|
} else if (auth.error) {
|
|
console.error("Auth Error:", auth.error);
|
|
navigate("/login", { replace: true });
|
|
}
|
|
}, [auth.isAuthenticated, auth.error, navigate, auth.user]);
|
|
|
|
return <div>Loading Auth...</div>;
|
|
}
|