Застрял на openAuthSessionAsync – как закрыть браузер после успешного входа в Google OAuth?

В настоящее время я работаю над приложением React Native, где использую Google OAuth для аутентификации пользователей. Я использую метод openAuthSessionAsync из API Expo AuthSession для обработки потока аутентификации. Процесс входа в систему работает нормально, и я могу успешно получить идентификатор сеанса. Однако я застрял в том, как закрыть окно браузера после завершения входа в систему.

Вот соответствующая часть моего кода:

const signIn = async () => {
    const frontEndUrl = getBaseUrl();
    const result = await Browser.openAuthSessionAsync(
        `${frontEndUrl}/auth/google?mobile=true`,
        `${frontEndUrl}`
    ;
    console.info(result.type);

    if (result.type !== "success") return;
    const url = Linking.parse(result.url);
    const sessionID = url.queryParams?.session_id?.toString() ?? null;
    if (!sessionID) return;
    await SecureStore.setItemAsync("session_id", sessionID);
};

Я следовал руководству из Lucia Auth Guidebook на GitHub OAuth с Expo, но в нем не упоминается, как закрыть браузер после аутентификации или решить проблемы, не получив никакого результата.

Проблемы, с которыми я столкнулся:

Окно браузера не закрывается: после успешного входа в систему окно браузера остается открытым.

Результат не возвращен: объект результата openAuthSessionAsync не содержит никаких данных, что делает невозможным продолжение потока аутентификации.

Я просмотрел документацию Expo и React Native, но пока не нашел решения.

Есть ли способ программно закрыть окно браузера после успешного входа в систему с помощью openAuthSessionAsync?

Или просто убедиться, что метод openAuthSessionAsync возвращает ожидаемый результат, чтобы я мог продолжить процесс аутентификации?

Любая помощь или руководство будут очень признательны!

Заранее спасибо!

Дополнительный контекст:

Реагировать нативную версию: 0.74.2 Версия Expo SDK: 51 Платформа: Андроид Репозиторий Github: RecordScratch

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать WebBrowser.dismissAuthSession(), чтобы программно закрыть веб-браузер.

Больше документации здесь.

Что касается отсутствия результата: у меня была та же проблема, и я переключился на WebBrowser.openBrowserAsync, и это решило проблему для меня.

Привет, спасибо за предложение. Мне было интересно, как я могу проверить URL-адрес браузера, чтобы я мог вызвать WebBrowser.dismissAuthSession(). Я попробовал Linking.addEventListener, однако он обнаруживает только изменения мобильного URL-адреса, а не изменения URL-адреса браузера.

paradoxioi 02.07.2024 20:11

Вам необходимо настроить диплинкинг, чтобы вернуться в приложение из браузера Expo.

Arian Hamdi 03.07.2024 00:47
Ответ принят как подходящий

Я смог решить проблему.

Мне просто нужно было предоставить глубокую ссылку из браузера Expo на мобильное приложение. Результат вернет успех, как только я настрою URL-адрес перенаправления на глубокую ссылку, предоставленную браузером Expo.

Так

const result = await Browser.openAuthSessionAsync(
        `${frontEndUrl}/auth/google?mobile=true`,
        `${frontEndUrl}`);

Просто стал

const result = await Browser.openAuthSessionAsync(
        `${frontEndUrl}/auth/google?mobile=true`,
        `exp://192.168.2.100:8081`);

А затем в моем внутреннем обработчике аутентификации мне пришлось перенаправить на exp://192.168.2.100:8081 после завершения.

https://docs.expo.dev/guides/deep-linking/

Другие вопросы по теме