forked from baron/baron-sso
fix: SSO 로그인 리다이렉션 로직의 신뢰성 강화 및 환경변수 설정 보완 #243
This commit is contained in:
@@ -56,6 +56,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- APP_ENV=${APP_ENV:-development}
|
- APP_ENV=${APP_ENV:-development}
|
||||||
- API_PROXY_TARGET=http://baron_backend:3000
|
- API_PROXY_TARGET=http://baron_backend:3000
|
||||||
|
- USERFRONT_URL=${USERFRONT_URL}
|
||||||
ports:
|
ports:
|
||||||
- "${ADMIN_PORT:-5173}:5173"
|
- "${ADMIN_PORT:-5173}:5173"
|
||||||
volumes:
|
volumes:
|
||||||
@@ -74,6 +75,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- APP_ENV=${APP_ENV:-development}
|
- APP_ENV=${APP_ENV:-development}
|
||||||
- API_PROXY_TARGET=http://baron_backend:3000
|
- API_PROXY_TARGET=http://baron_backend:3000
|
||||||
|
- USERFRONT_URL=${USERFRONT_URL}
|
||||||
ports:
|
ports:
|
||||||
- "${DEVFRONT_PORT:-5174}:5173"
|
- "${DEVFRONT_PORT:-5174}:5173"
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -51,5 +51,9 @@ bool implIsPopup() {
|
|||||||
|
|
||||||
// Fallback: Check query parameters for integration source
|
// Fallback: Check query parameters for integration source
|
||||||
final uri = Uri.base;
|
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 {
|
class LoginScreen extends ConsumerStatefulWidget {
|
||||||
final String? verificationToken;
|
final String? verificationToken;
|
||||||
final String? loginChallenge;
|
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
|
@override
|
||||||
ConsumerState<LoginScreen> createState() => _LoginScreenState();
|
ConsumerState<LoginScreen> createState() => _LoginScreenState();
|
||||||
@@ -75,14 +76,17 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
|
|||||||
_tabController = TabController(length: 3, vsync: this, initialIndex: 1);
|
_tabController = TabController(length: 3, vsync: this, initialIndex: 1);
|
||||||
_tabController.addListener(_handleTabSelection);
|
_tabController.addListener(_handleTabSelection);
|
||||||
_drySendEnabled = _parseBoolParam(Uri.base.queryParameters['drySend']) && !AuthProxyService.isProdEnv;
|
_drySendEnabled = _parseBoolParam(Uri.base.queryParameters['drySend']) && !AuthProxyService.isProdEnv;
|
||||||
|
_redirectUrl = widget.redirectUrl;
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
final uri = Uri.base;
|
final uri = Uri.base;
|
||||||
|
|
||||||
if (uri.queryParameters.containsKey('redirect_url')) {
|
if (_redirectUrl == null) {
|
||||||
_redirectUrl = uri.queryParameters['redirect_url'];
|
if (uri.queryParameters.containsKey('redirect_url')) {
|
||||||
} else if (uri.queryParameters.containsKey('redirect_uri')) {
|
_redirectUrl = uri.queryParameters['redirect_url'];
|
||||||
_redirectUrl = uri.queryParameters['redirect_uri'];
|
} else if (uri.queryParameters.containsKey('redirect_uri')) {
|
||||||
|
_redirectUrl = uri.queryParameters['redirect_uri'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_loginChallenge = widget.loginChallenge ?? uri.queryParameters['login_challenge'];
|
_loginChallenge = widget.loginChallenge ?? uri.queryParameters['login_challenge'];
|
||||||
|
|||||||
@@ -94,15 +94,24 @@ final _router = GoRouter(
|
|||||||
path: '/signin',
|
path: '/signin',
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
final loginChallenge = state.uri.queryParameters['login_challenge'];
|
final loginChallenge = state.uri.queryParameters['login_challenge'];
|
||||||
_routerLogger.info("Navigating to /signin with login_challenge: $loginChallenge");
|
final redirectUrl = state.uri.queryParameters['redirect_uri'] ?? state.uri.queryParameters['redirect_url'];
|
||||||
return LoginScreen(key: state.pageKey, loginChallenge: loginChallenge);
|
_routerLogger.info("Navigating to /signin with login_challenge: $loginChallenge, redirect: $redirectUrl");
|
||||||
|
return LoginScreen(
|
||||||
|
key: state.pageKey,
|
||||||
|
loginChallenge: loginChallenge,
|
||||||
|
redirectUrl: redirectUrl,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/login',
|
path: '/login',
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
_routerLogger.info("Navigating to /login");
|
final redirectUrl = state.uri.queryParameters['redirect_uri'] ?? state.uri.queryParameters['redirect_url'];
|
||||||
return LoginScreen(key: state.pageKey);
|
_routerLogger.info("Navigating to /login, redirect: $redirectUrl");
|
||||||
|
return LoginScreen(
|
||||||
|
key: state.pageKey,
|
||||||
|
redirectUrl: redirectUrl,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
|
|||||||
Reference in New Issue
Block a user