Expo Google Login 独立重定向到 google.com

Roe*_*pan 9 react-native appauth expo

我的应用程序与 Expo 一起使用,我import * as Google from "expo-google-app-auth";用于来自谷歌的登录用户。在开发模式下,它的工作正常。 在独立模式下,

它重定向我以选择电子邮件,在我选择它之后将我重定向到 google.com 主页而不是返回到我的应用程序

问题:为什么将我重定向到谷歌,我该如何处理(再次 - 在开发模式下它的工作)

  1. 我的谷歌登录应用

    try {
    const result = await Google.logInAsync({
        androidClientId: "556835760268-jm5v5u3h1bu4rcontent.com",
        androidStandaloneAppClientId: "556835760268-jm5v5u3h1bu4uea3jr788tent.com",
        scopes: ["profile", "email"],
    });
    
    Run Code Online (Sandbox Code Playgroud)
  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"
     }
    
    Run Code Online (Sandbox Code Playgroud)

}

Atm*_*mas 1

我怀疑问题只是没有指定重定向 URI 信息。

一般来说,您的身份验证器(在本例中为 Google)需要知道在完成身份验证后将用户发送到哪里(即什么 URL)。就我而言,我使用 AuthSession 并且必须指定由 AuthSession 生成的redirectUri,它最终将提供链接回应用程序的返回路径,以便它可以在登录后自动处理恢复应用程序逻辑。

如果身份验证器(谷歌)不知道登录后将用户发送到哪里,那么它只会将您重定向到它认为安全的地方(即谷歌的网站),这似乎并不是不合理的。

至于与开发模式的不一致,很可能会做出一些合理的默认值,出于安全原因,这些默认值不/不能/不应该在全局模式下。AuthSession 和 Expo Google 文档上都有文字说明了预期的这种类型的不一致。例如,这里

关于redirectUrl的注意事项:如果您选择提供自己的redirectUrl,则它应该以AppAuth.OAuthRedirect返回的值开头。这样,无论您是在 Expo Go 中测试还是作为独立应用程序进行测试,该方法都将正确且一致地运行。

另外,如果您还没有这样做,请务必查看并实施部署到 Android 上的独立应用程序的具体说明

最后,考虑切换到 AuthSession,因为之前的回答者正确地指出它当前已被标记为已弃用。您可以在文档页面顶部看到巨大的已弃用横幅,如本答案中所述。如果您必须让某些东西正常工作,不妨让它与最新支持的版本一起工作。

如果您确实使用 AuthSession,请查看本节,其中包含有关如何生成重定向 URI 的以下参考信息

“AuthSession.makeRedirectUri() 为当前平台和环境创建一个重定向url。您需要手动定义将在裸工作流程React Native应用程序或Expo独立应用程序 中使用的 重定向,这是因为它无法自动推断”。

请注意,当您设置redirectUri 功能时,无论您如何设置,您还需要将google 端的URI 列入白名单。这是因为身份验证器 (Google) 需要知道要求其移交凭据的 URI 模式是值得信赖的。这样,如果有人试图冒充您并让他们将您的用户凭据发送到不受信任的 URL,Google 就不会这样做。