#react-native #expo #appauth
#реагировать — родной #выставка #appauth
Вопрос:
мое приложение, связанное с Expo, я использую import * as Google from "expo-google-app-auth";
для входа пользователей из Google. в режиме разработки он работает корректно, как и ожидалось. но в автономном режиме ,
он перенаправляет меня на выбор электронной почты, а после того, как я выберу его, перенаправляет меня на google.com домашняя страница вместо возврата к моему приложению
вопрос: почему меня перенаправляют в Google и как я могу с этим справиться (опять же — в режиме разработки его работа)
- мой вход в приложение Google
try { const result = await Google.logInAsync({ androidClientId: "556835760268-jm5v5u3h1bu4rcontent.com", androidStandaloneAppClientId: "556835760268-jm5v5u3h1bu4uea3jr788tent.com", scopes: ["profile", "email"], });
- мой файл app.json:
{ "expo": { "name": "Lior", "slug": "Lior", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icon.png", "scheme": "myapp", "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#ffffff" }, "updates": { "fallbackToCacheTimeout": 0 }, "assetBundlePatterns": [ "**/*" ], "ios": { "bundleIdentifier": "com.roei.liorApp", "buildNumber": "1.0.0" }, "web": { "favicon": "./assets/favicon.png" }, "android": { "package": "com.roei.liorApp", "versionCode": 1, "config": { "googleSignIn":{ "apiKey": "AIzaSyD4K3trmw", "certificateHash": "89B503B4EDC94" }, "googleMaps": { "apiKey": "AM35K3trmw" }
}
Комментарии:
1. Вы нашли решение этой проблемы?
2. Я добавил более подробную информацию о последнем механизме создания redirectUri в свой пост ниже. Мой последний комментарий ссылался на более старый механизм для выполнения того же самого, поэтому я просто удалил свой старый комментарий, чтобы не давать устаревших советов.
Ответ №1:
Я подозреваю, что проблема просто в том, что не указана информация URI перенаправления.
В общем, ваш аутентификатор (в данном случае Google) должен знать, куда отправить пользователя (т. Е. Какой URL-адрес) после завершения аутентификации. В моем случае я использую AuthSession и должен указать redirectUri, который генерируется AuthSession, который в конечном итоге предоставит обратный путь, связанный с приложением, чтобы он мог автоматически обрабатывать логику возобновления приложения после входа в систему.
Если аутентификатор (Google) не знает, куда отправить пользователя после входа в систему, не кажется необоснованным, что он просто перенаправит вас куда-нибудь, что он считает безопасным (например, сайт Google).
Что касается несоответствия режиму разработки, вполне вероятно, что используются некоторые разумные значения по умолчанию, которые не / не могут / не должны использоваться в глобальном режиме по соображениям безопасности. Как в AuthSession, так и в Expo Google docs есть текст, который указывает на ожидаемый тип несоответствия. Например, здесь
Примечание по redirectUrl: если вы решите предоставить свой собственный redirectUrl, он должен начинаться со значения, возвращаемого AppAuth .OAuthRedirect. Таким образом, метод будет работать правильно и последовательно, независимо от того, проводите ли вы тестирование в Expo Go или как отдельное приложение.
Кроме того, если вы еще этого не сделали, обязательно просмотрите и выполните конкретные инструкции по развертыванию в автономном приложении на Android
Наконец, подумайте о переключении на AuthSession, потому что предыдущий ответчик был прав, указав, что в настоящее время он помечен как устаревший. Вы можете увидеть гигантский устаревший баннер вверху страниц документа, как указано в этом ответе. Если вам нужно заставить что-то работать, с таким же успехом можно заставить его работать с последней поддерживаемой версией.
Если вы используете AuthSession, ознакомьтесь с этим разделом, содержащим следующие ссылки на то, как сгенерировать URI перенаправления
«AuthSession.makeRedirectUri() Создает URL-адрес перенаправления для текущей платформы и среды. Вам необходимо вручную определить перенаправление, которое будет использоваться в приложении React Native для простого рабочего процесса или в автономном приложении Expo, потому что оно не может быть выведено автоматически «.
Обратите внимание, что при настройке функции перенаправления, как бы вы ее ни настроили, вам также потребуется внести URI в белый список на стороне Google. Это потому, что аутентификатор (Google) должен знать, что шаблон URI, которому его просят передать учетные данные, заслуживает доверия. Таким образом, если кто-то попытается притвориться вами и заставить их отправить учетные данные ваших пользователей на ненадежный URL, Google этого не сделает.
Комментарии:
1. Я использую AuthSession, как я уже упоминал в другом ответе. Пакет, который я использую, — это expo-auth-session . Однако здесь у меня та же ошибка, что и у OP. Я не передаю никаких перенаправлений напрямую. Я просмотрел настройки конфигурации на этой странице ( docs.expo.io/versions/latest/sdk/google ), и убедился, что я все сделал правильно. Он по-прежнему направляет меня на Google.com
2. @StevenMatthews, просто чтобы подтвердить, вы используете эту страницу, верно? docs.expo.io/versions/latest/sdk/auth-session (ссылка на страницу, которую вы разместили, была устаревшей ссылкой Google). Кроме того, я думаю, вам определенно нужно передать перенаправление напрямую, особенно в автономном режиме. Я добавлю в конец своего поста выше, чтобы поговорить об этом. Пожалуйста, проверьте сообщение для получения подробной информации после слов «Если вы используете AuthSession»!
3. Я также подозреваю, что он использует устаревшую версию. @StevenMatthews можете ли вы предоставить нам какой-нибудь минимальный рабочий код в expo snack?
4. @StevenMatthews Интеграция redirectUri решила проблему для вас? Если нет, просмотр вашего кода аутентификации, как сказал Mrp, будет хорошим следующим шагом.