AWS Cognito登录与谷歌不会保存用户到用户池

问题描述 投票:0回答:1

我不知道为什么,当我使用社交媒体的登录,即谷歌提供AWS Cognito不起作用。我已在amplify配置中的所有所需的规则,使谷歌提供商,并设置awsconfiguration.json为好。当我登录使用电子邮件或用户名,这是常规的登录密码的使用,一切正常。用户保存到用户池:

Normal sign in

但是,当我登录使用谷歌,没有用户保存。看来,登录信息只被保存SharedPreferences,而不是云。这里的证明:

Google login

我不知道为什么。这里是我的代码登录:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
        RESPONSE_SUCCESS_GOOGLE_LOGIN -> {
            try {
                val task = GoogleSignIn.getSignedInAccountFromIntent(data)
                val account = task.getResult(ApiException::class.java)!!
                AWSMobileClient.getInstance().federatedSignIn(IdentityProvider.GOOGLE.toString(), account.idToken, object : Callback<UserStateDetails> {
                    override fun onResult(details: UserStateDetails) {
                        // onResult is called, but the user information not saved to the cloud
                    }

                    override fun onError(e: Exception) {
                        Log.e(TAG, "sign-in error", e)
                    }
                })
            } catch (e: ApiException) {
                Log.w(TAG, "signInResult:failed code=" + e.statusCode)
            }
        }
    }
}

您可以测试一个随机字符串,它是不是一个正确的JWT令牌都:

val randomJwt = "239rwienaffe"
AWSMobileClient.getInstance().federatedSignIn(IdentityProvider.GOOGLE.toString(), randomJwt, object : Callback<UserStateDetails> {

然后onResult被调用,通知登录就是成功。非常有趣的,是不是?我不知道如何正确地实现谷歌与登录AWS Cognito。这是非常难学AWS比火力地堡。

你有陈述或步骤,谷歌提供正确登录?我需要实现复杂的东西来实现这一简单的功能吗?例如。使用API​​网关,λ,IAM等之间的组合

android amazon-web-services kotlin amazon-cognito google-login
1个回答
0
投票

该代码表明,你正在使用Cognito Identity Pool/Federated Identities在谷歌的标志。从Amplify docs,该federatedSignIn()用于直接从Cognito联合身份,这是从Cognito用户池不同获得的AWS凭据。为了节省谁通过谷歌登录的用户,则需要integrate Social login with Congito userpool

您可能需要使用Cognito托管UI与社会了userpool登录您的AMPLIFY应用集成为每this issue

© www.soinside.com 2019 - 2024. All rights reserved.