Expo перенаправляет логин Google на google.com в автономном режиме

#react-native #expo #appauth

#реагировать — родной #выставка #appauth

Вопрос:

мое приложение, связанное с Expo, я использую import * as Google from "expo-google-app-auth"; для входа пользователей из Google. в режиме разработки он работает корректно, как и ожидалось. но в автономном режиме ,

он перенаправляет меня на выбор электронной почты, а после того, как я выберу его, перенаправляет меня на google.com домашняя страница вместо возврата к моему приложению

вопрос: почему меня перенаправляют в Google и как я могу с этим справиться (опять же — в режиме разработки его работа)

  1. мой вход в приложение Google
     try {
    const result = await Google.logInAsync({
        androidClientId: "556835760268-jm5v5u3h1bu4rcontent.com",
        androidStandaloneAppClientId: "556835760268-jm5v5u3h1bu4uea3jr788tent.com",
        scopes: ["profile", "email"],
    });
     
  2. мой файл 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, будет хорошим следующим шагом.