bic*_*erd 5 authentication android amazon-cognito aws-amplify
我们正在尝试在 Android 上配置 AWS Amplify 身份验证 (Cognito),但是当我们尝试使用有效的用户名和密码登录用户时,会调用 onResult 回调,其 signInState 等于 SignInState.DONE,但是当我们尝试获取令牌(同步或异步),引发异常:“getTokens 不支持在注销时检索令牌”。
查看日志,似乎引发了未处理的异常并被忽略(因为登录状态为 DONE):
java.lang.RuntimeException:联合令牌时出错。在 com.amazonaws.mobile.client.AWSMobileClient$8.run(AWSMobileClient.java:1484) 在 com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115) 在 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.getSession(Cognito)User.getSession(Cognito)在 com.amazonaws.mobile.client.AWSMobileClient$6.run(AWSMobileClient.java:1142) 在 com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101) 在 java.lang.Thread.run (Thread.java:818) 引起:com.amazonaws.services.cognitoidentity.model.NotAuthorizedException:令牌不是来自此身份池的受支持提供者。(服务:AmazonCognitoIdentity;状态代码:400;错误代码:NotAuthorizedException;请求 ID:3c924e1f-70ea-11e9-80ca-01ad7f96c8b7)在 com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:730) 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) .amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:739) at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) at com.eama.mobileclient
我的配置:
build.gradle(应用程序)
implementation "com.amazonaws:aws-android-sdk-mobile-client:2.13.4"
implementation "com.amazonaws:aws-android-sdk-auth-userpools:2.13.4"
Run Code Online (Sandbox Code Playgroud)
MainApplication.kt(扩展应用程序)
AWSMobileClient.getInstance().initialize(applicationContext, object : Callback<UserStateDetails> {
override fun onError(e: Exception?) {
Timber.e(e, "An error occurred while tried to init the AWSMobileClient")
}
override fun onResult(result: UserStateDetails?) {
Timber.d("Successfully started the AWSMobileClient: ${result?.userState}") // Reaches here with SIGNED_OUT
}
})
Run Code Online (Sandbox Code Playgroud)
存储库.kt
suspend fun signInOnCognito(email: String, password: String): String =
suspendCoroutine { continuation ->
val signInCallback = object : Callback<SignInResult> {
override fun onResult(result: SignInResult) {
Timber.d("Sign in result: ${result.signInState}") // <---- DONE
fetchToken(continuation)
}
override fun onError(exception: java.lang.Exception) {
continuation.resumeWithException(exception)
}
}
AWSMobileClient.getInstance().signIn(email, password, null, signInCallback)
}
fun fetchToken(continuation: Continuation<String>) {
val getTokensCallback = object : Callback<Tokens> {
override fun onResult(result: Tokens) {
Timber.d("Got the user token")
continuation.resume(result.idToken.tokenString)
}
override fun onError(e: Exception) {
Timber.e(e, "Cannot get the user token")
continuation.resumeWithException(e)
}
}
AWSMobileClient.getInstance().getTokens(getTokensCallback) // <---- EXCEPTION
}
Run Code Online (Sandbox Code Playgroud)
awsconfiguration.json
{
"UserAgent": "aws-amplify-cli/0.1.0",
"Version": "1.0",
"IdentityManager": {
"Default": {}
},
"CredentialsProvider": {
"CognitoIdentity": {
"Default": {
"PoolId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"Region": "us-east-1"
}
}
},
"CognitoUserPool": {
"Default": {
"PoolId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"AppClientId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"AppClientSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"Region": "us-east-1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
amplifyconfiguration.json请检查 app -> src -> res -> raw -> &中的身份 poolId 是否正确(即使您没有使用访客访问)awsconfiguration.json。您可以在 AWS 控制台 -> cognito -> 管理身份池 -> 单击您的池 -> 单击示例代码中找到您的 poolId。之后我的状态从 SIGNED_OUT 更改为 SIGNED_IN:
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |