Skip to content

Commit f5820c6

Browse files
authored
break(amplify_auth_cognito): fixes getCurrentUser disparity (#773)
1 parent 2c0878c commit f5820c6

File tree

9 files changed

+64
-34
lines changed

9 files changed

+64
-34
lines changed

packages/amplify_analytics_pinpoint/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ dependencies {
6060
api amplifyCore
6161

6262
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
63-
implementation 'com.amplifyframework:aws-analytics-pinpoint:1.22.0'
64-
implementation 'com.amplifyframework:aws-auth-cognito:1.22.0'
63+
implementation 'com.amplifyframework:aws-analytics-pinpoint:1.25.1'
64+
implementation 'com.amplifyframework:aws-auth-cognito:1.25.1'
6565
testImplementation 'junit:junit:4.13'
6666
testImplementation 'org.mockito:mockito-core:3.1.0'
6767
testImplementation 'org.mockito:mockito-inline:3.1.0'

packages/amplify_api/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ dependencies {
5555
api amplifyCore
5656

5757
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
58-
implementation "com.amplifyframework:aws-api:1.22.0"
59-
implementation "com.amplifyframework:aws-api-appsync:1.22.0"
58+
implementation "com.amplifyframework:aws-api:1.25.1"
59+
implementation "com.amplifyframework:aws-api-appsync:1.25.1"
6060

6161
testImplementation 'junit:junit:4.13'
6262
testImplementation 'org.mockito:mockito-core:3.10.0'

packages/amplify_auth_cognito/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ android {
6262
dependencies {
6363
api amplifyCore
6464
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
65-
implementation 'com.amplifyframework:aws-auth-cognito:1.22.0'
65+
implementation 'com.amplifyframework:aws-auth-cognito:1.25.1'
6666
testImplementation 'junit:junit:4.13'
6767
testImplementation 'org.mockito:mockito-core:3.10.0'
6868
testImplementation 'org.mockito:mockito-inline:3.1.0'

packages/amplify_auth_cognito/android/src/main/kotlin/com/amazonaws/amplify/amplify_auth_cognito/AuthCognito.kt

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import com.amazonaws.amplify.amplify_auth_cognito.types.FlutterResendUserAttribu
5151
import com.amazonaws.amplify.amplify_auth_cognito.types.FlutterResendUserAttributeConfirmationCodeResult
5252
import com.amazonaws.amplify.amplify_core.exception.ExceptionUtil.Companion.handleAddPluginException
5353
import com.amazonaws.amplify.amplify_auth_cognito.utils.isRedirectActivityDeclared
54+
import com.amazonaws.mobile.client.AWSMobileClient
5455
import com.amplifyframework.auth.AuthException
5556
import com.amplifyframework.auth.AuthProvider
5657
import com.amplifyframework.auth.AuthSession
@@ -383,13 +384,37 @@ public class AuthCognito : FlutterPlugin, ActivityAware, MethodCallHandler, Plug
383384

384385
private fun onGetCurrentUser(@NonNull flutterResult: Result) {
385386
try {
386-
var user: AuthUser? = Amplify.Auth.currentUser;
387-
if (user is AuthUser) {
388-
prepareUserResult(flutterResult, user);
389-
} else {
390-
// TODO: Mechanism to check guest access status
391-
throw AuthException.SignedOutException(AuthException.GuestAccess.GUEST_ACCESS_DISABLED)
392-
}
387+
/*
388+
Because Android does not preserve the user after session expiration but iOS does so,
389+
we need to use the mobileclient to get the old username to enforce platform parity.
390+
*/
391+
Amplify.Auth.fetchAuthSession(
392+
{ result ->
393+
val cognitoAuthSession = result as AWSCognitoAuthSession
394+
when (cognitoAuthSession.userSub.type) {
395+
// If the user sub accessor successful the user is present and the session should be valid
396+
AuthSessionResult.Type.SUCCESS -> {
397+
val awsMobileClient = AWSMobileClient.getInstance()
398+
val username = awsMobileClient.username
399+
prepareUserResult(flutterResult, AuthUser(cognitoAuthSession.userSub.toString(), username));
400+
}
401+
// If the user sub accessor failed, check the signIn state
402+
AuthSessionResult.Type.FAILURE -> {
403+
// if signedIn flag still true, we know session is expired so get the old user
404+
if (result.isSignedIn) {
405+
val awsMobileClient = AWSMobileClient.getInstance()
406+
val username = awsMobileClient.username
407+
val userid = awsMobileClient.userSub
408+
prepareUserResult(flutterResult, AuthUser(userid, username));
409+
// if signIn flag is false, we assume user is signed out so throw exception
410+
} else {
411+
errorHandler.handleAuthError(flutterResult, AuthException.SignedOutException())
412+
}
413+
}
414+
}
415+
},
416+
{ error -> errorHandler.handleAuthError(flutterResult, error) }
417+
)
393418
} catch (e: AuthException) {
394419
errorHandler.handleAuthError(flutterResult, e)
395420
} catch (e: Exception) {

packages/amplify_auth_cognito/android/src/test/kotlin/com/amazonaws/amplify/amplify_auth_cognito/AmplifyAuthCognitoPluginTest.kt

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,20 @@ class AmplifyAuthCognitoPluginTest {
7070
private val mockSignInResult = AuthSignInResult(false, signInStep)
7171
private val mockResetPasswordResult = AuthResetPasswordResult(false, resetStep)
7272
private val mockUpdateUserAttributeResult = AuthUpdateAttributeResult(true, updateAttributeStep)
73+
private val id = AuthSessionResult.success("id")
74+
private val awsCredentials: AuthSessionResult<AWSCredentials> = AuthSessionResult.success(BasicAWSCredentials("access", "secret"))
75+
private val userSub = AuthSessionResult.success("sub")
76+
private val tokens = AuthSessionResult.success(AWSCognitoUserPoolTokens("access", "id", "refresh"))
77+
private val mockSession = AWSCognitoAuthSession(
78+
true,
79+
id,
80+
awsCredentials,
81+
userSub,
82+
tokens
83+
)
7384
private var mockAuth = mock(AuthCategory::class.java)
7485

86+
7587
@Before
7688
fun setup() {
7789
plugin = AuthCognito(AuthCognitoHubEventStreamHandler(), mock(Activity::class.java))
@@ -514,13 +526,18 @@ class AmplifyAuthCognitoPluginTest {
514526
fun getCurrentUser_returnsSuccess() {
515527
// Arrange
516528
doAnswer { invocation: InvocationOnMock ->
517-
plugin.prepareUpdatePasswordResult(mockResult)
529+
plugin.prepareUserResult(mockResult, AuthUser("username", "userSub"))
530+
null as Void?
531+
}.`when`(mockAuth).currentUser
532+
533+
doAnswer { invocation: InvocationOnMock ->
534+
plugin.prepareCognitoSessionResult(mockResult, mockSession)
518535
null as Void?
519-
}.`when`(mockAuth).getCurrentUser()
536+
}.`when`(mockAuth).fetchAuthSession(any(), any())
520537

521538
val data: HashMap<*, *> = hashMapOf(
522-
"username" to "username",
523-
"userSub" to "userSub"
539+
"username" to "username",
540+
"userSub" to "userSub"
524541
)
525542
val arguments: HashMap<String, Any> = hashMapOf("data" to data)
526543
val call = MethodCall("getCurrentUser", arguments)
@@ -561,18 +578,6 @@ class AmplifyAuthCognitoPluginTest {
561578

562579
@Test
563580
fun fetchSession_returnsSuccess() {
564-
val id = AuthSessionResult.success("id")
565-
val awsCredentials: AuthSessionResult<AWSCredentials> = AuthSessionResult.success(BasicAWSCredentials("access", "secret"))
566-
val userSub = AuthSessionResult.success("sub")
567-
val tokens = AuthSessionResult.success(AWSCognitoUserPoolTokens("access", "id", "refresh"))
568-
val mockSession = AWSCognitoAuthSession(
569-
true,
570-
id,
571-
awsCredentials,
572-
userSub,
573-
tokens
574-
)
575-
576581
// Arrange
577582
doAnswer { invocation: InvocationOnMock ->
578583
plugin.prepareCognitoSessionResult(mockResult, mockSession)

packages/amplify_core/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ android {
6161

6262
dependencies {
6363
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
64-
implementation 'com.amplifyframework:core:1.22.0'
64+
implementation 'com.amplifyframework:core:1.25.1'
6565
implementation 'com.google.code.gson:gson:2.8.6'
6666
testImplementation 'junit:junit:4.13'
6767
testImplementation 'org.mockito:mockito-core:3.1.0'

packages/amplify_datastore/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ android {
5757

5858
dependencies {
5959
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
60-
implementation "com.amplifyframework:aws-datastore:1.22.0"
61-
implementation "com.amplifyframework:aws-api-appsync:1.22.0"
60+
implementation "com.amplifyframework:aws-datastore:1.25.1"
61+
implementation "com.amplifyframework:aws-api-appsync:1.25.1"
6262
testImplementation 'junit:junit:4.13'
6363
testImplementation 'org.mockito:mockito-core:3.10.0'
6464
testImplementation 'org.mockito:mockito-inline:3.10.0'

packages/amplify_flutter/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@ android {
5858

5959
dependencies {
6060
api amplifyCore
61-
implementation 'com.amplifyframework:core:1.22.0'
61+
implementation 'com.amplifyframework:core:1.25.1'
6262
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
6363
testImplementation 'junit:junit:4.13'
6464
testImplementation 'org.mockito:mockito-core:3.1.0'
6565
testImplementation 'org.mockito:mockito-inline:3.1.0'
6666
testImplementation 'androidx.test:core:1.3.0'
6767
testImplementation 'org.robolectric:robolectric:4.3.1'
6868
testImplementation 'com.google.code.gson:gson:2.8.6'
69-
testImplementation 'com.amplifyframework:aws-auth-cognito:1.22.0'
69+
testImplementation 'com.amplifyframework:aws-auth-cognito:1.25.1'
7070
}

packages/amplify_storage_s3/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@ android {
4949
dependencies {
5050
api amplifyCore
5151
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
52-
implementation 'com.amplifyframework:aws-storage-s3:1.22.0'
52+
implementation 'com.amplifyframework:aws-storage-s3:1.25.1'
5353
}

0 commit comments

Comments
 (0)