diff --git a/userfront/lib/core/services/web_auth_integration_web.dart b/userfront/lib/core/services/web_auth_integration_web.dart index ab5c0a3d..2ecaf079 100644 --- a/userfront/lib/core/services/web_auth_integration_web.dart +++ b/userfront/lib/core/services/web_auth_integration_web.dart @@ -3,8 +3,14 @@ import 'dart:async'; import 'dart:html' as html; import 'package:flutter/foundation.dart'; +import 'auth_token_store.dart'; void implSendLoginSuccess(String token) { + var effectiveToken = token; + if (effectiveToken.isEmpty) { + effectiveToken = AuthTokenStore.getToken() ?? ""; + } + final uri = Uri.parse(html.window.location.href); final redirectUri = uri.queryParameters['redirect_uri']; @@ -12,7 +18,7 @@ void implSendLoginSuccess(String token) { // Redirection flow final target = Uri.parse(redirectUri); final query = Map.from(target.queryParameters); - query['token'] = token; + query['token'] = effectiveToken; final finalUri = target.replace(queryParameters: query); debugPrint('Redirecting to: ${finalUri.toString()}'); @@ -20,7 +26,7 @@ void implSendLoginSuccess(String token) { return; } - final message = {'type': 'LOGIN_SUCCESS', 'token': token}; + final message = {'type': 'LOGIN_SUCCESS', 'token': effectiveToken}; if (html.window.opener != null) { try { diff --git a/userfront/lib/features/auth/presentation/login_screen.dart b/userfront/lib/features/auth/presentation/login_screen.dart index 82a3ae6a..f4e12b3f 100644 --- a/userfront/lib/features/auth/presentation/login_screen.dart +++ b/userfront/lib/features/auth/presentation/login_screen.dart @@ -163,6 +163,16 @@ class _LoginScreenState extends ConsumerState return; } } + + final token = AuthTokenStore.getToken(); + if (token != null && token.isNotEmpty) { + if (WebAuthIntegration.isPopup() || (_redirectUrl != null && _redirectUrl!.isNotEmpty)) { + debugPrint("[Auth] Cookie session with external integration. Notifying..."); + WebAuthIntegration.sendLoginSuccess(token); + return; + } + } + if (mounted) { context.go('/'); } @@ -1123,17 +1133,10 @@ class _LoginScreenState extends ConsumerState } } - if (WebAuthIntegration.isPopup()) { - debugPrint("[Auth] Popup detected. Notifying opener and attempting to close."); + if (WebAuthIntegration.isPopup() || (_redirectUrl != null && _redirectUrl!.isNotEmpty)) { + debugPrint("[Auth] External integration detected (popup or redirect). Notifying..."); WebAuthIntegration.sendLoginSuccess(token); - return; // Stop here for popups - } - - if (_redirectUrl != null && _redirectUrl!.isNotEmpty) { - debugPrint("[Auth] Redirecting standalone window to: $_redirectUrl"); - final target = "$_redirectUrl?token=$token"; - launchUrlString(target, webOnlyWindowName: '_self'); - return; + return; } debugPrint("[Auth] Login success. Navigating to root.");