aws-amplify / aws-sdk-android

AWS SDK for Android. For more information, see our web site:
https://docs.amplify.aws
Other
1.02k stars 548 forks source link

feat(auth): Provide a clear message during getTokens that there are no valid tokens on device #3518

Closed tylerjroach closed 5 months ago

tylerjroach commented 5 months ago

Issue #, if available: N/A

We received a report that it is difficult to detect why the token refresh process fails, and if it is recoverable or not. This information is critical for a customer to understand whether or not the customer should log the user out.

We were able to identify that when a customer saw Exception("No cached session.") and there was an exception attached, such as UnknownHostException, these errors should be transient.

However, there are cases where the user only sees Exception("No cached session.", null) which leaves further questions on whether or not it is due to an invalid token, or some other transient issue.

Description of changes:

getAuthenticationDetails documentation states: "Call out to the dev to get the credentials for a user.". We can't do this during refresh flow, however, if we see this message, we understand that the Cognito service has stated that the refresh token is no longer valid.

The customer will now see `Exception("No cached session.", new CognitoNotAuthorizedException("No valid tokens on device.")) and be able to act on this information.

I've added logging in additional places that are not expected to be hit, such as getMFACode, to make sure that we always provide better descriptions on refresh failures.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.