react-native-google-signin 与 AWS Cognito

Posted

技术标签:

【中文标题】react-native-google-signin 与 AWS Cognito【英文标题】:react-native-google-signin with AWS Cognito 【发布时间】:2018-07-26 21:59:29 【问题描述】:

我正在开发一个 react-native 应用程序,我想让我的用户能够使用 google 登录。但是,当我向 google API 发出请求时,它会返回 WRONG SIGNIN Error: DEVELOPER_ERROR

我正在使用 AWS Cognito,并希望将 Google 登录与其集成。我看到一些问题说要生成我的“webClientId”的 SHA-1 蓝图,但它们都使用 firebase。在 Cognito 上,没有添加相应 SHA-1 蓝图的字段。

我的代码如下:

  componentWillMount() 
        GoogleSignin.configure(
          webClientId: googleConfig.clientId
        );
    

...

  googleSignIn() 
      GoogleSignin.signIn()
      .then((user) => 
        console.log(user);
        this.setState(user: user);
      )
      .catch((err) => 
        console.log('WRONG SIGNIN', err);
      )
      .done();
  

...

<GoogleSigninButton
              style= height: 48 
              size=GoogleSigninButton.Size.Standard
              color=GoogleSigninButton.Color.Light
              onPress=this.googleSignIn.bind(this)/> 

提前感谢您的帮助。

【问题讨论】:

你看过这个例子吗(react-native-cognito-login-example),似乎涵盖了所有的基础:github.com/patw0929/react-native-cognito-login-example/blob/… 【参考方案1】:

这是配置不匹配。确保您的 android/app/google-services.json 是正确的。

您可能需要将 SHA 证书指纹添加到 Firebase 配置。按照以下说明查找您的 SHA1 指纹 这个帖子: SHA-1 fingerprint of keystore certificate。 然后,转到https://console.firebase.google.com/,选择您的应用,然后 在项目设置下添加 SHA1 值(上​​方的齿轮图标 left) -> Your Apps -> SHA 证书指纹

如果您将配置对象中的 webClientId 传递给 GoogleSignin.configure() 确保它是正确的。你可以得到你的 来自 Google Developer Console 的 webClientId。它们列在“OAuth 2.0 客户端 ID”。

如果您在调试模式下运行应用程序而不使用 webClientId 或 您确定它是正确的问题可能是签名(SHA-1 或 SHA-256) 不匹配。您需要将以下内容添加到 android/app/build.gradle:

signingConfigs 
    debug 
        if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) 
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        
    
    release 
        if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) 
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        
    

来自here。

我还在 github 上找到了this working example。

【讨论】:

【参考方案2】:
    转到 AWS 控制台 > IAM > 身份提供商 > 创建提供商 > 提供商类型 = OpenID Connect > 提供商 URL = https://accounts.google.com > 受众 = “您在 Google 开发者控制台中创建的 Google 客户端 ID” 转到 AWS 控制台 > Cognito > 联合身份池。选择您的身份池,转到“编辑身份池”,然后导航到 OpenID 选项卡。您应该会看到一个标题为“accounts.google.com”的复选框,请选中它。 在您的代码中,使用您在构建用于调用 GoogleAuthUtil.GetTokenGoogleAuthUtil.GetToken(this, googleAccount, scopes) 的范围字符串时在 Google Developer Console 中生成的“Google WebApp 客户端 ID”。那是scopes = "audience:server:client_id:" + "webClientId"

【讨论】:

以上是关于react-native-google-signin 与 AWS Cognito的主要内容,如果未能解决你的问题,请参考以下文章