我不知道为什么,当我使用社交媒体的登录,即谷歌提供AWS Cognito不起作用。我已在amplify
配置中的所有所需的规则,使谷歌提供商,并设置awsconfiguration.json
为好。当我登录使用电子邮件或用户名,这是常规的登录密码的使用,一切正常。用户保存到用户池:
但是,当我登录使用谷歌,没有用户保存。看来,登录信息只被保存SharedPreferences
,而不是云。这里的证明:
我不知道为什么。这里是我的代码登录:
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等之间的组合
该代码表明,你正在使用Cognito Identity Pool/Federated Identities在谷歌的标志。从Amplify docs,该federatedSignIn()用于直接从Cognito联合身份,这是从Cognito用户池不同获得的AWS凭据。为了节省谁通过谷歌登录的用户,则需要integrate Social login with Congito userpool。
您可能需要使用Cognito托管UI与社会了userpool登录您的AMPLIFY应用集成为每this issue。