diff --git a/lib/screens/auth/create_account_content.dart b/lib/screens/auth/create_account_content.dart index d0ff6214..5306a14c 100644 --- a/lib/screens/auth/create_account_content.dart +++ b/lib/screens/auth/create_account_content.dart @@ -15,6 +15,7 @@ import 'package:island/pods/websocket.dart'; import 'package:island/screens/account/me/profile_update.dart'; import 'package:island/services/event_bus.dart'; import 'package:island/services/notify.dart'; +import 'package:island/services/udid.dart'; import 'package:island/widgets/alert.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:styled_widget/styled_widget.dart'; @@ -180,7 +181,7 @@ class CreateAccountContent extends HookConsumerWidget { } else { // Existing user, switch to login showSnackBar('Account already exists. Redirecting to login.'); - context.goNamed('login'); + if (context.mounted) context.goNamed('login'); } } catch (err) { showErrorAlert(err); @@ -192,10 +193,15 @@ class CreateAccountContent extends HookConsumerWidget { Future withOidc(String provider) async { waitingForOidc.value = true; final serverUrl = ref.watch(serverUrlProvider); + final deviceId = await getUdid(); final url = Uri.parse('$serverUrl/pass/auth/login/${provider.toLowerCase()}') .replace( - queryParameters: {'redirect_uri': 'solian://auth/callback'}, + queryParameters: { + 'returnUrl': 'solian://auth/callback', + 'deviceId': deviceId, + 'flow': 'login', + }, ) .toString(); final isLaunched = await launchUrlString( diff --git a/lib/screens/auth/login_content.dart b/lib/screens/auth/login_content.dart index 56dfd6e1..fe43ba73 100644 --- a/lib/screens/auth/login_content.dart +++ b/lib/screens/auth/login_content.dart @@ -653,8 +653,9 @@ class _LoginLookupScreen extends HookConsumerWidget { final token = ref.watch(tokenProvider); final deviceId = await getUdid(); final queryParams = { - 'redirect_uri': 'solian://auth/callback', - 'device_id': deviceId, + 'returnUrl': 'solian://auth/callback', + 'deviceId': deviceId, + 'flow': 'login', }; if (token?.token != null) { queryParams['token'] = token!.token; diff --git a/lib/widgets/app_wrapper.dart b/lib/widgets/app_wrapper.dart index 3fbac56c..a177497e 100644 --- a/lib/widgets/app_wrapper.dart +++ b/lib/widgets/app_wrapper.dart @@ -116,8 +116,10 @@ class _AppWrapperState extends ConsumerState } void _handleDeepLink(Uri uri, WidgetRef ref) { + String path = '/${uri.host}${uri.path}'; + // Special handling for OIDC auth callback - if (uri.path == '/auth/callback' && + if (path == '/auth/callback' && uri.queryParameters.containsKey('challenge')) { final challenge = uri.queryParameters['challenge']!; eventBus.fire(OidcAuthCallbackEvent(challenge)); @@ -129,7 +131,6 @@ class _AppWrapperState extends ConsumerState } final router = ref.read(routerProvider); - String path = '/${uri.host}${uri.path}'; if (uri.queryParameters.isNotEmpty) { path = Uri.parse(