1
0
forked from baron/baron-sso

fix: SSO 로그인 리다이렉션 로직의 신뢰성 강화 및 환경변수 설정 보완 #243

This commit is contained in:
2026-02-11 16:34:52 +09:00
parent ab2a5462d4
commit 787d7aa0f0
4 changed files with 29 additions and 10 deletions

View File

@@ -56,6 +56,7 @@ services:
environment:
- APP_ENV=${APP_ENV:-development}
- API_PROXY_TARGET=http://baron_backend:3000
- USERFRONT_URL=${USERFRONT_URL}
ports:
- "${ADMIN_PORT:-5173}:5173"
volumes:
@@ -74,6 +75,7 @@ services:
environment:
- APP_ENV=${APP_ENV:-development}
- API_PROXY_TARGET=http://baron_backend:3000
- USERFRONT_URL=${USERFRONT_URL}
ports:
- "${DEVFRONT_PORT:-5174}:5173"
volumes:

View File

@@ -51,5 +51,9 @@ bool implIsPopup() {
// Fallback: Check query parameters for integration source
final uri = Uri.base;
return uri.queryParameters['source'] == 'adminfront';
if (uri.queryParameters['source'] == 'adminfront') return true;
// Manual parse fallback for cases where Uri.base might miss params due to hash routing
final search = html.window.location.search;
return search.contains('source=adminfront');
}

View File

@@ -16,8 +16,9 @@ import '../../../core/services/web_window.dart';
class LoginScreen extends ConsumerStatefulWidget {
final String? verificationToken;
final String? loginChallenge;
final String? redirectUrl;
const LoginScreen({super.key, this.verificationToken, this.loginChallenge});
const LoginScreen({super.key, this.verificationToken, this.loginChallenge, this.redirectUrl});
@override
ConsumerState<LoginScreen> createState() => _LoginScreenState();
@@ -75,14 +76,17 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
_tabController = TabController(length: 3, vsync: this, initialIndex: 1);
_tabController.addListener(_handleTabSelection);
_drySendEnabled = _parseBoolParam(Uri.base.queryParameters['drySend']) && !AuthProxyService.isProdEnv;
_redirectUrl = widget.redirectUrl;
WidgetsBinding.instance.addPostFrameCallback((_) async {
final uri = Uri.base;
if (uri.queryParameters.containsKey('redirect_url')) {
_redirectUrl = uri.queryParameters['redirect_url'];
} else if (uri.queryParameters.containsKey('redirect_uri')) {
_redirectUrl = uri.queryParameters['redirect_uri'];
if (_redirectUrl == null) {
if (uri.queryParameters.containsKey('redirect_url')) {
_redirectUrl = uri.queryParameters['redirect_url'];
} else if (uri.queryParameters.containsKey('redirect_uri')) {
_redirectUrl = uri.queryParameters['redirect_uri'];
}
}
_loginChallenge = widget.loginChallenge ?? uri.queryParameters['login_challenge'];

View File

@@ -94,15 +94,24 @@ final _router = GoRouter(
path: '/signin',
builder: (context, state) {
final loginChallenge = state.uri.queryParameters['login_challenge'];
_routerLogger.info("Navigating to /signin with login_challenge: $loginChallenge");
return LoginScreen(key: state.pageKey, loginChallenge: loginChallenge);
final redirectUrl = state.uri.queryParameters['redirect_uri'] ?? state.uri.queryParameters['redirect_url'];
_routerLogger.info("Navigating to /signin with login_challenge: $loginChallenge, redirect: $redirectUrl");
return LoginScreen(
key: state.pageKey,
loginChallenge: loginChallenge,
redirectUrl: redirectUrl,
);
},
),
GoRoute(
path: '/login',
builder: (context, state) {
_routerLogger.info("Navigating to /login");
return LoginScreen(key: state.pageKey);
final redirectUrl = state.uri.queryParameters['redirect_uri'] ?? state.uri.queryParameters['redirect_url'];
_routerLogger.info("Navigating to /login, redirect: $redirectUrl");
return LoginScreen(
key: state.pageKey,
redirectUrl: redirectUrl,
);
},
),
GoRoute(