amazon-cognito - 注销状态用户 AWSCognito 在全新安装的 android 应用程序中
问题描述
我有以下情况。AWSCognito sdk返回第一次安装应用程序时出现的错误,cognito sdk在初始化方法中返回SIGN-OUT,当获得SIGN-OUT状态时,使用用户名和密码登录,使用SIGN -IN 方法,此方法返回 DONE 状态。在尝试获取token时,用户的状态仍然是会话结束,尽管在SIGN-IN(SIGN-IN)函数中,DONE状态(DONE)响应,无法获取token
build.gradle(应用程序)
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.13.4'
implementation 'com.amazonaws:aws-android-sdk-auth-userpools:2.13.4'
主要活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
AWSMobileClient.getInstance().initialize(applicationContext, object : Callback<UserStateDetails>{
override fun onResult(result: UserStateDetails?) {
Log.i("awscognito", result?.userState?.name)
when (result?.userState) {
UserState.SIGNED_OUT -> {
Log.i("awscognito", "no hay sesion")
login()
}
UserState.SIGNED_IN -> Log.d("COGNITO_STATE", "hay sesion")
else -> Log.i("awscognito", "entra al else")
}
}
override fun onError(e: Exception?) {
Log.d("awscognito", e.toString())
}
})
}
fun login(){
val username = "user"
val password = "password"
val signInResult = AWSMobileClient.getInstance().signIn(username, password, null)
when (signInResult.signInState) {
SignInState.NEW_PASSWORD_REQUIRED -> Log.i("awscognito", signInResult.signInState.name)
SignInState.SMS_MFA -> Log.i("awscognito", signInResult.signInState.name)
SignInState.ADMIN_NO_SRP_AUTH-> Log.i("awscognito", signInResult.signInState.name)
SignInState.CUSTOM_CHALLENGE -> Log.i("awscognito", signInResult.signInState.name)
SignInState.DEVICE_PASSWORD_VERIFIER -> Log.i("awscognito", signInResult.signInState.name)
SignInState.DEVICE_SRP_AUTH -> Log.i("awscognito", signInResult.signInState.name)
SignInState.PASSWORD_VERIFIER -> Log.i("awscognito", signInResult.signInState.name)
SignInState.UNKNOWN -> Log.i("COGNITO_STATE", signInResult.signInState.name)
SignInState.DONE -> {
Log.i("awscognito", signInResult.signInState.name)
getToken()
}
}
}
fun getToken(){
AWSMobileClient.getInstance().getTokens(object : Callback<Tokens>{
override fun onResult(result: Tokens?) {
Log.i("awscognito", result?.idToken?.tokenString)
}
override fun onError(e: java.lang.Exception?) {
Log.i("awscognito", e.toString())
}
})
}
}
我希望 Awscognito 会返回一个有效的令牌,但我得到以下结果
2019-05-14 08:25:56.763 5666-5687/com.example.cognito W/AWSMobileClient: Failed to federate tokens during sign-in
java.lang.RuntimeException: Error in federating the token.
at com.amazonaws.mobile.client.AWSMobileClient$8.run(AWSMobileClient.java:1484)
at com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115)
at com.amazonaws.mobile.client.AWSMobileClient.federatedSignInWithoutAssigningState(AWSMobileClient.java:1414)
at com.amazonaws.mobile.client.AWSMobileClient$6$1.onSuccess(AWSMobileClient.java:1156)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser$6.onSuccess(CognitoUser.java:787)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser$27.run(CognitoUser.java:2553)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser$24.run(CognitoUser.java:2430)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationContinuation.continueTask(AuthenticationContinuation.java:124)
at com.amazonaws.mobile.client.AWSMobileClient$6$1.getAuthenticationDetails(AWSMobileClient.java:1173)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.getSession(CognitoUser.java:751)
at com.amazonaws.mobile.client.AWSMobileClient$6.run(AWSMobileClient.java:1142)
at com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115)
at com.amazonaws.mobile.client.AWSMobileClient.signIn(AWSMobileClient.java:1127)
at com.example.cognito.MainActivity.login(MainActivity.kt:43)
at com.example.cognito.MainActivity$onCreate$1.onResult(MainActivity.kt:26)
at com.example.cognito.MainActivity$onCreate$1.onResult(MainActivity.kt:20)
at com.amazonaws.mobile.client.internal.InternalCallback.call(InternalCallback.java:75)
at com.amazonaws.mobile.client.internal.InternalCallback.onResult(InternalCallback.java:62)
at com.amazonaws.mobile.client.AWSMobileClient$2.run(AWSMobileClient.java:593)
at com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101)
at java.lang.Thread.run(Thread.java:764)
Caused by: com.amazonaws.services.cognitoidentity.model.InvalidIdentityPoolConfigurationException: Invalid identity pool configuration. Check assigned IAM roles for this pool. (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: InvalidIdentityPoolConfigurationException; Request ID: 3085dbf4-7654-11e9-99fb-516bf8dbaba2)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:730)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:405)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212)
at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:1658)
at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getCredentialsForIdentity(AmazonCognitoIdentityClient.java:680)
at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:782)
at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:694)
at com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:631)
at com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:510)
at com.amazonaws.auth.CognitoCachingCredentialsProvider.getIdentityId(CognitoCachingCredentialsProvider.java:452)
at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:776)
at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:694)
at com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:631)
at com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:510)
at com.amazonaws.mobile.client.AWSMobileClient.federateWithCognitoIdentity(AWSMobileClient.java:1515)
at com.amazonaws.mobile.client.AWSMobileClient$8.run(AWSMobileClient.java:1471)
at com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115)
at com.amazonaws.mobile.client.AWSMobileClient.federatedSignInWithoutAssigningState(AWSMobileClient.java:1414)
at com.amazonaws.mobile.client.AWSMobileClient$6$1.onSuccess(AWSMobileClient.java:1156)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser$6.onSuccess(CognitoUser.java:787)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser$27.run(CognitoUser.java:2553)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser$24.run(CognitoUser.java:2430)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationContinuation.continueTask(AuthenticationContinuation.java:124)
at com.amazonaws.mobile.client.AWSMobileClient$6$1.getAuthenticationDetails(AWSMobileClient.java:1173)
at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.getSession(CognitoUser.java:751)
at com.amazonaws.mobile.client.AWSMobileClient$6.run(AWSMobileClient.java:1142)
at com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115)
at com.amazonaws.mobile.client.AWSMobileClient.signIn(AWSMobileClient.java:1127)
at com.example.cognito.MainActivity.login(MainActivity.kt:43)
at com.example.cognito.MainActivity$onCreate$1.onResult(MainActivity.kt:26)
at com.example.cognito.MainActivity$onCreate$1.onResult(MainActivity.kt:20)
at com.amazonaws.mobile.client.internal.InternalCallback.call(InternalCallback.java:75)
at com.amazonaws.mobile.client.internal.InternalCallback.onResult(InternalCallback.java:62)
at com.amazonaws.mobile.client.AWSMobileClient$2.run(AWSMobileClient.java:593)
at com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101)
at java.lang.Thread.run(Thread.java:764)
2019-05-14 08:25:56.764 5666-5687/com.example.cognito I/awscognito: DONE
2019-05-14 08:25:56.766 5666-5709/com.example.cognito D/AWSMobileClient: Inspecting user state details
2019-05-14 08:25:56.767 5666-5709/com.example.cognito D/AWSMobileClient: waitForSignIn: userState:SIGNED_OUT
2019-05-14 08:25:56.767 5666-5709/com.example.cognito I/awscognito: java.lang.Exception: getTokens does not support retrieving tokens while signed-out
解决方案
推荐阅读
- pine-script - 我想使用图表上已有的另一个自定义构建指标的输出在电视的 pine 脚本中生成警报
- java - Android 前台服务即使在被杀后仍保留麦克风访问权限
- react-native - 如何在详细的道具 React-Native 中获取道具变量
- python - 使用 Windows 的 PySpark 多列
- time-series - Gnuplot 填充曲线添加了不需要的“底部”边框
- python-3.x - 无法在字符串中搜索简单模式
- c# - 字典错误地存储在mongodb中
- javascript - 如何删除在 Firestore 数据库中有子文档的文档?
- html - 发出动画形状而不在底部留下大的间隙等 - CSS/HTML
- c# - Visual Studio 更新更改了默认语言