forked from baron/baron-sso
fix: SSO 로그인 리다이렉션 로직의 신뢰성 강화 및 환경변수 설정 보완 #243
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
@@ -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'];
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user