1
0
forked from baron/baron-sso

SSO 로그인 방식을 팝업 기반으로 변경

This commit is contained in:
2026-02-25 09:09:18 +09:00
parent 19f5096470
commit 3423178250
4 changed files with 20 additions and 5 deletions

View File

@@ -1,12 +1,19 @@
import { useEffect } from "react";
import { useAuth } from "react-oidc-context";
import { useNavigate } from "react-router-dom";
import { userManager } from "../../lib/auth";
export default function AuthCallbackPage() {
const auth = useAuth();
const navigate = useNavigate();
useEffect(() => {
// 팝업으로 열린 경우 signinPopupCallback 처리
if (window.opener) {
userManager.signinPopupCallback();
return;
}
if (auth.isAuthenticated) {
navigate("/", { replace: true });
} else if (auth.error) {

View File

@@ -1,5 +1,6 @@
import { ExternalLink, LogIn, ShieldHalf } from "lucide-react";
import { useAuth } from "react-oidc-context";
import { useNavigate } from "react-router-dom";
import { Button } from "../../components/ui/button";
import {
Card,
@@ -11,10 +12,15 @@ import {
function LoginPage() {
const auth = useAuth();
const navigate = useNavigate();
const handleSSOLogin = () => {
// OIDC client-side authentication flow started here
auth.signinRedirect();
const handleSSOLogin = async () => {
try {
await auth.signinPopup();
navigate("/clients", { replace: true });
} catch (error) {
console.error("Popup login failed", error);
}
};
return (

View File

@@ -30,8 +30,9 @@ apiClient.interceptors.response.use(
if (error.response?.status === 401) {
// 401 발생 시 로그인 페이지로 리다이렉트
const isAuthPath = window.location.pathname.startsWith("/callback");
if (!isAuthPath) {
userManager.signinRedirect();
const isLoginPath = window.location.pathname === "/login";
if (!isAuthPath && !isLoginPath) {
window.location.href = "/login";
}
}
return Promise.reject(error);

View File

@@ -9,6 +9,7 @@ export const oidcConfig: AuthProviderProps = {
response_type: "code",
scope: "openid offline_access profile email", // offline_access for refresh token
post_logout_redirect_uri: window.location.origin,
popup_redirect_uri: `${window.location.origin}/auth/callback`,
userStore: new WebStorageStateStore({ store: window.localStorage }),
automaticSilentRenew: true,
};