Skip to content

Local SignOut always starts a prompt #3982

@borkke

Description

@borkke

Describe the bug

I successfully implemented SignIn with username/pass and SignIn with Google, and now I have a problem with SignOut. I want to use "local sign out" and if read the documentation, this is the default behavior of Amplify.Auth.signOut(). However, when I do use that, I get a popup with a very confusing message (wants to "Sign In").

Sign out actually completed successfully, however, I didn't expect to see that popup.

Image

Steps To Reproduce

1. Prepare AWS Cognito with Google as social login (I did it via Terraform)

{
  "version": "1",
  "auth": {
    "aws_region": "eu-central-1",
    "user_pool_id": "eu-central-1_******",
    "user_pool_client_id": "******",
    "username_attributes": ["email"],
    "standard_required_attributes": ["email"],
    "user_verification_types": ["email"],
    "unauthenticated_identities_enabled": false,
    "password_policy": {
      "min_length": 8,
      "require_lowercase": true,
      "require_uppercase": true,
      "require_numbers": true,
      "require_symbols": true
    },
    "oauth": {
      "identity_providers": ["GOOGLE", "FACEBOOK"],
      "domain": "auth.staging.getsend.app",
      "scopes": ["openid", "email", "profile"],
      "redirect_sign_in_uri": [
          "Send://callback"
      ],
      "redirect_sign_out_uri": [
          "Send://signout"
      ],
      "response_type": "code"
    }
  }
}

2. Implement "signInWithGoogle" 

func signInWithGoogle() async throws {
        do {
            let signInResult = try await Amplify.Auth.signInWithWebUI(for: .google)
            if signInResult.isSignedIn {
                print("Google sign in successful")
            } else {
                print("Google sign in failed")
            }
        } catch let error as AuthError {
            print("An error occurred during Google sign in: \(error)")
            throw error
        } catch {
            print("An unexpected error occurred during Google sign in: \(error)")
            throw AuthError.unknown("An unexpected error occurred during Google sign in", error)
        }
    }
 
3. Implement signOutLocally

@MainActor
    func signOutLocally() async throws {
        # Tried this also but it's the same `Amplify.Auth.signOut()`
        let options = AuthSignOutRequest.Options(globalSignOut: false)
        let result = await Amplify.Auth.signOut(options: options)
        guard let signOutResult = result as? AWSCognitoSignOutResult
        else {
            throw AuthError.service("Sign out failed", "")
        }

        print("Local signout successful: \(signOutResult.signedOutLocally)")
    }

4. Configure app Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>Send</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

5. Call the functions from a View/ViewModel

@MainActor
    func login() {
        Task {
            guard validate() else { return }
            
            isAuthenticating = true
            
            do {
                let signInResult = try await authService.signIn(username: email, password: password)
                //....
            } catch {
                print("Login failed: \(error)")
                errorMessage = "Login failed: \(error.localizedDescription)"
            }
            
            isAuthenticating = false
        }
    }
func signOut() {
        Task {
            do {
                try await authService.signOutLocally()
                print("User signed out successfully.")
                //...
            } catch {
                print("Error signing out: \(error)")
            }
        }
    }

6. Start the app. Click login (should work)
7. Click Logout
8. Popup appears (like in screenshot)
9. User gets loged out

Expected behavior

Sign out and NO popup on the screen.

Amplify Framework Version

2.46.2

Amplify Categories

Auth

Dependency manager

Swift PM

Swift version

6.0.3

CLI version

n/a

Xcode version

16.2

Relevant log output

Two parts from my iOS app. One related to app start and one to logout.

Part 1

Adding plugin: AWSCognitoAuthPlugin.AWSCognitoAuthPlugin)
Credential Store state change:

{
    "CredentialStoreState.notConfigured" =     {
    };
}
Auth state change:

{
    "AuthState.notConfigured" =     {
    };
}
Auth state change:

{
    "AuthState.configuringAuth" =     {
    };
}
AWSCognitoAuthPlugin/InitializeAuthConfiguration.swift Starting execution
Credential Store state change:

{
    "CredentialStoreState.migratingLegacyStore" =     {
    };
}
AWSCognitoAuthPlugin/MigrateLegacyCredentialStore.swift Starting execution
[KeychainStore] Initialized keychain with service=com.amplify.awsCognitoAuthPlugin, attributes=KeychainStoreAttributes(itemClass: "genp", service: "com.amplify.awsCognitoAuthPlugin", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=authConfiguration
[KeychainStore] Successfully retrieved `Data` from the store with key=authConfiguration
[KeychainStore] Started setting `Data` for key=authConfiguration
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Found existing item, updating
[KeychainStore] Successfully updated `Data` in keychain for key=authConfiguration
[KeychainStore] Initialized keychain with service=app.getsend.Send.AWSCognitoIdentityUserPool, attributes=KeychainStoreAttributes(itemClass: "genp", service: "app.getsend.Send.AWSCognitoIdentityUserPool", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `String` from the store with key=*****.currentUser
Error creating the CFMessagePort needed to communicate with PPT.
[KeychainStore] Started retrieving `Data` from the store with key=*****.currentUser
[KeychainStore] No Keychain item found for key=*****.currentUser
[KeychainStore] Initialized keychain with service=app.getsend.Send.AWSCognitoIdentityUserPool, attributes=KeychainStoreAttributes(itemClass: "genp", service: "app.getsend.Send.AWSCognitoIdentityUserPool", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `String` from the store with key=*****.currentUser
[KeychainStore] Started retrieving `Data` from the store with key=*****.currentUser
[KeychainStore] No Keychain item found for key=*****.currentUser
[KeychainStore] Starting to remove all items from keychain
[KeychainStore] Successfully removed all items from keychain
[KeychainStore] Initialized keychain with service=Optional("app.getsend.Send").AWSMobileClient, attributes=KeychainStoreAttributes(itemClass: "genp", service: "Optional(\"app.getsend.Send\").AWSMobileClient", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=loginsMap
[KeychainStore] No Keychain item found for key=loginsMap
[KeychainStore] Initialized keychain with service=Optional("app.getsend.Send").AWSMobileClient, attributes=KeychainStoreAttributes(itemClass: "genp", service: "Optional(\"app.getsend.Send\").AWSMobileClient", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `String` from the store with key=federationProvider
[KeychainStore] Started retrieving `Data` from the store with key=federationProvider
[KeychainStore] No Keychain item found for key=federationProvider
[KeychainStore] Starting to remove all items from keychain
[KeychainStore] Successfully removed all items from keychain
AWSCognitoAuthPlugin/MigrateLegacyCredentialStore.swift Sending event CredentialStoreEvent.loadCredentialStore
AWSCognitoAuthPlugin/LoadCredentialStore.swift Starting execution
Credential Store state change:

{
    "CredentialStoreState.loadingStoredCredentials" =     {
    };
}
AWSCognitoAuthPlugin/LoadCredentialStore.swift Retreiving credential amplifyCredentials
[KeychainStore] Initialized keychain with service=com.amplify.awsCognitoAuthPlugin, attributes=KeychainStoreAttributes(itemClass: "genp", service: "com.amplify.awsCognitoAuthPlugin", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=authConfiguration
[KeychainStore] Successfully retrieved `Data` from the store with key=authConfiguration
[KeychainStore] Started setting `Data` for key=authConfiguration
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Found existing item, updating
[KeychainStore] Successfully updated `Data` in keychain for key=authConfiguration
[KeychainStore] Started retrieving `Data` from the store with key=amplify.eu-central-*******.session
[KeychainStore] No Keychain item found for key=amplify.eu-central-*******.session
AWSCognitoAuthPlugin/LoadCredentialStore.swift Sending event CredentialStoreEvent.throwError
AWSCognitoAuthPlugin/IdleCredentialStore.swift Starting execution
AWSCognitoAuthPlugin/IdleCredentialStore.swift Sending event CredentialStoreEvent.moveToIdleState
No existing session found.
AWSCognitoAuthPlugin/InitializeAuthConfiguration.swift Sending event AuthEvent.validateCredentialAndConfiguration
AWSCognitoAuthPlugin/ValidateCredentialsAndConfiguration.swift Starting execution
AWSCognitoAuthPlugin/ValidateCredentialsAndConfiguration.swift Sending event AuthEvent.configureAuthentication
Auth state change:

{
    "AuthState.validatingCredentialsAndConfiguration" =     {
    };
}
Auth state change:

{
    "AuthState.configuringAuthentication" =     {
        "AuthenticationState.notConfigured" =         {
        };
    };
}
AWSCognitoAuthPlugin/InitializeAuthenticationConfiguration.swift Starting execution
AWSCognitoAuthPlugin/InitializeAuthenticationConfiguration.swift Sending event AuthenticationEvent.configure
Credential Store state change:

{
    "CredentialStoreState.error" =     {
        errorType = "KeychainStoreError: Unable to find the keychain item";
    };
}
Credential Store state change:

{
    "CredentialStoreState.idle" =     {
    };
}
AWSCognitoAuthPlugin/ConfigureAuthentication.swift Start execution
Auth state change:

{
    "AuthState.configuringAuthentication" =     {
        "AuthenticationState.configured" =         {
        };
    };
}
AWSCognitoAuthPlugin/ConfigureAuthentication.swift Sending event AuthenticationEvent.initializedSignedOut
AWSCognitoAuthPlugin/ConfigureAuthentication.swift Sending event AuthEvent.authenticationConfigured
Auth state change:

{
    "AuthState.configuringAuthentication" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
    };
}
AWSCognitoAuthPlugin/InitializeAuthorizationConfiguration.swift Starting execution
Auth state change:

{
    "AuthState.configuringAuthorization" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
        "AuthorizationState.notConfigured" =         {
        };
    };
}
AWSCognitoAuthPlugin/InitializeAuthorizationConfiguration.swift Sending event AuthorizationEvent.configure
AWSCognitoAuthPlugin/ConfigureAuthorization.swift Starting execution
AWSCognitoAuthPlugin/ConfigureAuthorization.swift Sending event AuthEvent.authorizationConfigured
Auth state change:

{
    "AuthState.configuringAuthorization" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
        "AuthorizationState.configured" =         {
        };
    };
}
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
Starting execution for Auth.fetchSessionAPI
Starting execution
Check if authstate configured
Auth state configured
Fetching current state
No session found, fetching unauth session
Waiting for session to establish
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
        "AuthorizationState.fetchingUnAuthSession" =         {
            "FetchSessionState.notStarted" =             {
            };
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/InitializeFetchUnAuthSession.swift Starting execution
AWSCognitoAuthPlugin/InitializeFetchUnAuthSession.swift Sending event FetchAuthSessionEvent.throwError
AWSCognitoAuthPlugin/InformSessionError.swift Starting execution
AWSCognitoAuthPlugin/InformSessionError.swift Sending event AuthorizationEvent.receivedSessionError
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
        "AuthorizationState.fetchingUnAuthSession" =         {
            "FetchSessionState.error" =             {
                error = "AWSCognitoAuthPlugin.FetchSessionError.noIdentityPool";
            };
        };
        "SignUpState.notStarted" =         {
        };
    };
}
Received fetch auth session error - sessionError(AWSCognitoAuthPlugin.FetchSessionError.noIdentityPool, noCredentials)
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "(nil)";
        };
        "AuthorizationState.error" =         {
            Error = "AWSCognitoAuthPlugin.AuthorizationError.sessionError(AWSCognitoAuthPlugin.FetchSessionError.noIdentityPool, noCredentials)";
        };
        "SignUpState.notStarted" =         {
        };
    };
}
Successfully completed execution for Auth.fetchSessionAPI with result:
{
    awsCredentialsError = "AuthError: No identity pool configuration found\nRecovery suggestion: Make sure that the amplify configuration passed to Auth plugin is valid";
    cognitoTokensError = "AuthError: No identity pool configuration found\nRecovery suggestion: Make sure that the amplify configuration passed to Auth plugin is valid";
    identityIdError = "AuthError: No identity pool configuration found\nRecovery suggestion: Make sure that the amplify configuration passed to Auth plugin is valid";
    isSignedIn = false;
    userSubError = "AuthError: No identity pool configuration found\nRecovery suggestion: Make sure that the amplify configuration passed to Auth plugin is valid";
}
Is user signed in: false
Starting execution for Auth.socialWebUISignInAPI
Check if authstate configured
Auth state configured
Wait for a valid state
Start signIn flow
Wait for signIn to complete
AWSCognitoAuthPlugin/IntializeSignInFlow.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingIn" =         {
            "SignInState.notStarted" =             {
            };
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/IntializeSignInFlow.swift Sending event SignInEvent.initiateHostedUISignIn
AWSCognitoAuthPlugin/InitializeHostedUISignIn.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingIn" =         {
            "SignInState.signingInWithHostedUI" =             {
                "HostedUISignInState.notStarted" =                 {
                };
            };
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/LoadCredentialStore.swift Starting execution
Credential Store state change:

{
    "CredentialStoreState.loadingStoredCredentials" =     {
    };
}
Checking next step for: notStarted
AWSCognitoAuthPlugin/LoadCredentialStore.swift Retreiving credential deviceMetadata(username: "unknown")
[KeychainStore] Initialized keychain with service=com.amplify.awsCognitoAuthPlugin, attributes=KeychainStoreAttributes(itemClass: "genp", service: "com.amplify.awsCognitoAuthPlugin", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=authConfiguration
Checking next step for: signingInWithHostedUI(AWSCognitoAuthPlugin.HostedUISignInState.notStarted)
[KeychainStore] Successfully retrieved `Data` from the store with key=authConfiguration
[KeychainStore] Started setting `Data` for key=authConfiguration
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Found existing item, updating
[KeychainStore] Successfully updated `Data` in keychain for key=authConfiguration
[KeychainStore] Started retrieving `Data` from the store with key=amplify.eu-central-*******.unknown.deviceMetadata
[KeychainStore] No Keychain item found for key=amplify.eu-central-*******.unknown.deviceMetadata
AWSCognitoAuthPlugin/LoadCredentialStore.swift Sending event CredentialStoreEvent.throwError
AWSCognitoAuthPlugin/IdleCredentialStore.swift Starting execution
AWSCognitoAuthPlugin/IdleCredentialStore.swift Sending event CredentialStoreEvent.moveToIdleState
Credential Store state change:

{
    "CredentialStoreState.error" =     {
        errorType = "KeychainStoreError: Unable to find the keychain item";
    };
}
Credential Store state change:

{
    "CredentialStoreState.idle" =     {
    };
}
AWSCognitoAuthPlugin/LoadCredentialStore.swift Starting execution
Credential Store state change:

{
    "CredentialStoreState.loadingStoredCredentials" =     {
    };
}
AWSCognitoAuthPlugin/LoadCredentialStore.swift Retreiving credential asfDeviceId(username: "unknown")
[KeychainStore] Initialized keychain with service=com.amplify.awsCognitoAuthPlugin, attributes=KeychainStoreAttributes(itemClass: "genp", service: "com.amplify.awsCognitoAuthPlugin", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=authConfiguration
[KeychainStore] Successfully retrieved `Data` from the store with key=authConfiguration
[KeychainStore] Started setting `Data` for key=authConfiguration
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Found existing item, updating
[KeychainStore] Successfully updated `Data` in keychain for key=authConfiguration
[KeychainStore] Started retrieving `Data` from the store with key=amplify.eu-central-*******.unknown.deviceASF
[KeychainStore] Successfully retrieved `Data` from the store with key=amplify.eu-central-*******.unknown.deviceASF
AWSCognitoAuthPlugin/LoadCredentialStore.swift Sending event CredentialStoreEvent.completedOperation
AWSCognitoAuthPlugin/IdleCredentialStore.swift Starting execution
AWSCognitoAuthPlugin/IdleCredentialStore.swift Sending event CredentialStoreEvent.moveToIdleState
Credential Store state change:

{
    "CredentialStoreState.success" =     {
        savedData = "AWSCognitoAuthPlugin.CredentialStoreData.asfDeviceId(\"FDB86EAB-B504-463C-B41D-17929F6CE244\", \"unknown\")";
    };
}
Credential Store state change:

{
    "CredentialStoreState.idle" =     {
    };
}
AWSCognitoAuthPlugin/InitializeHostedUISignIn.swift Sending event HostedUIEvent.showHostedUI
AWSCognitoAuthPlugin/ShowHostedUISignIn.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingIn" =         {
            "SignInState.signingInWithHostedUI" =             {
                "HostedUISignInState.showingUI" =                 {
                };
            };
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/ShowHostedUISignIn.swift Showing url https://auth.staging.getsend.app/oauth2/authorize?response_type=code&code_challenge_method=S256&client_id=*****&state=7d23c04e-456f-42b2-8790-0f5d2cc3eacd&redirect_uri=Send://callback&scope=email%20openid%20profile&code_challenge=HcgAh8rRmC1TAhlsLDmDFwBmtXVqJMDYYMYiI8fsTj4&userContextData=eyJ2ZXJzaW9uIjoiSU9TMjAxNzExMTQiLCJzaWduYXR1cmUiOiJZMDJjUFlBeTBOenN5cnNkWG1TUjMwb2xhcmxOaDdoMFpVY3pMTGhjWFRZPSIsInBheWxvYWQiOiJ7XCJ1c2VyUG9vbElkXCI6XCJldS1jZW50cmFsLTFfMXA0MWtROTdaXCIsXCJ0aW1lc3RhbXBcIjpcIjQ3ODk5NzA0OTQyNTk5MzcyODBcIixcInVzZXJuYW1lXCI6XCJ1bmtub3duXCIsXCJjb250ZXh0RGF0YVwiOntcIlBsYXRmb3JtXCI6XCJpT1NcIixcIkRldmljZUxhbmd1YWdlXCI6XCJlbi1VU1wiLFwiQXBwbGljYXRpb25UYXJnZXRTZGtcIjpcIjEzMDAwMFwiLFwiRGV2aWNlSWRcIjpcIkZEQjg2RUFCLUI1MDQtNDYzQy1CNDFELTE3OTI5RjZDRTI0NFwiLFwiU2NyZWVuV2lkdGhQaXhlbHNcIjpcIjEyOTBcIixcIkJ1aWxkVHlwZVwiOlwiZGVidWdcIixcIkNsaWVudFRpbWV6b25lXCI6XCIrMDI6MDBcIixcIkFwcGxpY2F0aW9uTmFtZVwiOlwiYXBwLmdldHNlbmQuU2VuZFwiLFwiQXBwbGljYXRpb25WZXJzaW9uXCI6XCIxLjAtMVwiLFwiU2NyZWVuSGVpZ2h0UGl4ZWxzXCI6XCIyNzk2XCIsXCJEZXZpY2VOYW1lXCI6XCJpUGhvbmUgMTYgUGx1c1wiLFwiRGV2aWNlRmluZ2VycHJpbnRcIjpcIkFwcGxlXFxcL2lQaG9uZVxcXC9hcm02NFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFxcLy06MTguMlxcXC8tXFxcLy06LVxcXC9kZWJ1Z1wiLFwiUGhvbmVUeXBlXCI6XCJhcm02NFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXCIsXCJEZXZpY2VPc1JlbGVhc2VWZXJzaW9uXCI6XCIxOC4yXCIsXCJUaGlyZFBhcnR5RGV2aWNlSWRcIjpcIjVFRDA3MzA4LTQxMzEtNEMwRS05QUM4LUM5NTc0ODQyNzM3RFwifX0ifQ%3D%3D&identity_provider=Google
Checking next step for: signingInWithHostedUI(AWSCognitoAuthPlugin.HostedUISignInState.showingUI(AWSCognitoAuthPlugin.HostedUISigningInState(signInURL: https://auth.staging.getsend.app/oauth2/authorize?response_type=code&code_challenge_method=S256&client_id=*****&state=7d23c04e-456f-42b2-8790-0f5d2cc3eacd&redirect_uri=Send://callback&scope=email%20openid%20profile&code_challenge=HcgAh8rRmC1TAhlsLDmDFwBmtXVqJMDYYMYiI8fsTj4&userContextData=eyJ2ZXJzaW9uIjoiSU9TMjAxNzExMTQiLCJzaWduYXR1cmUiOiJZMDJjUFlBeTBOenN5cnNkWG1TUjMwb2xhcmxOaDdoMFpVY3pMTGhjWFRZPSIsInBheWxvYWQiOiJ7XCJ1c2VyUG9vbElkXCI6XCJldS1jZW50cmFsLTFfMXA0MWtROTdaXCIsXCJ0aW1lc3RhbXBcIjpcIjQ3ODk5NzA0OTQyNTk5MzcyODBcIixcInVzZXJuYW1lXCI6XCJ1bmtub3duXCIsXCJjb250ZXh0RGF0YVwiOntcIlBsYXRmb3JtXCI6XCJpT1NcIixcIkRldmljZUxhbmd1YWdlXCI6XCJlbi1VU1wiLFwiQXBwbGljYXRpb25UYXJnZXRTZGtcIjpcIjEzMDAwMFwiLFwiRGV2aWNlSWRcIjpcIkZEQjg2RUFCLUI1MDQtNDYzQy1CNDFELTE3OTI5RjZDRTI0NFwiLFwiU2NyZWVuV2lkdGhQaXhlbHNcIjpcIjEyOTBcIixcIkJ1aWxkVHlwZVwiOlwiZGVidWdcIixcIkNsaWVudFRpbWV6b25lXCI6XCIrMDI6MDBcIixcIkFwcGxpY2F0aW9uTmFtZVwiOlwiYXBwLmdldHNlbmQuU2VuZFwiLFwiQXBwbGljYXRpb25WZXJzaW9uXCI6XCIxLjAtMVwiLFwiU2NyZWVuSGVpZ2h0UGl4ZWxzXCI6XCIyNzk2XCIsXCJEZXZpY2VOYW1lXCI6XCJpUGhvbmUgMTYgUGx1c1wiLFwiRGV2aWNlRmluZ2VycHJpbnRcIjpcIkFwcGxlXFxcL2lQaG9uZVxcXC9hcm02NFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFxcLy06MTguMlxcXC8tXFxcLy06LVxcXC9kZWJ1Z1wiLFwiUGhvbmVUeXBlXCI6XCJhcm02NFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXCIsXCJEZXZpY2VPc1JlbGVhc2VWZXJzaW9uXCI6XCIxOC4yXCIsXCJUaGlyZFBhcnR5RGV2aWNlSWRcIjpcIjVFRDA3MzA4LTQxMzEtNEMwRS05QUM4LUM5NTc0ODQyNzM3RFwifX0ifQ%3D%3D&identity_provider=Google, state: "7d23c04e-456f-42b2-8790-0f5d2cc3eacd", codeChallenge: "qU1YsJNT6koxvla-98hIo9CjVMVjY1c0K4VSAEZbG4E", presentationAnchor: nil, options: AWSCognitoAuthPlugin.HostedUIOptions(scopes: ["openid", "email", "profile"], providerInfo: AWSCognitoAuthPlugin.HostedUIProviderInfo(authProvider: Optional(Amplify.AuthProvider.google), idpIdentifier: nil), presentationAnchor: nil, preferPrivateSession: false))))
AWSCognitoAuthPlugin/ShowHostedUISignIn.swift Sending event HostedUIEvent.fetchToken
AWSCognitoAuthPlugin/FetchHostedUISignInToken.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingIn" =         {
            "SignInState.signingInWithHostedUI" =             {
                "HostedUISignInState.fetchingToken" =                 {
                };
            };
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
Checking next step for: signingInWithHostedUI(AWSCognitoAuthPlugin.HostedUISignInState.fetchingToken)
AWSCognitoAuthPlugin/FetchHostedUISignInToken.swift Sending event SignInEvent(data: nil, id: "807B9B2A-FFC3-4431-9F21-69332210E986", eventType: AWSCognitoAuthPlugin.SignInEvent.EventType.finalizeSignIn(["userId": "93********************************07", "userName": "Go************************21", "signedInDate": 2025-04-19 05:45:06 +0000, "deviceMetadata": ["noData": "noData"], "tokens": ["refreshToken": "ey*****4Q", "accessToken": "ey*****ug", "expiry": 2025-04-19 06:45:06 +0000, "idToken": "ey*****mA"], "signInMethod": AWSCognitoAuthPlugin.SignInMethod.hostedUI(AWSCognitoAuthPlugin.HostedUIOptions(scopes: ["openid", "email", "profile"], providerInfo: AWSCognitoAuthPlugin.HostedUIProviderInfo(authProvider: Optional(Amplify.AuthProvider.google), idpIdentifier: nil), presentationAnchor: nil, preferPrivateSession: false))]), time: nil)
AWSCognitoAuthPlugin/SignInComplete.swift Starting execution
AWSCognitoAuthPlugin/SignInComplete.swift Sending event AuthenticationEvent.signInCompleted
Checking next step for: signingInWithHostedUI(AWSCognitoAuthPlugin.HostedUISignInState.done)
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingIn" =         {
            "SignInState.signingInWithHostedUI" =             {
                "HostedUISignInState.done" =                 {
                };
            };
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/InitializeFetchAuthSessionWithUserPool.swift Starting execution
AWSCognitoAuthPlugin/InitializeFetchAuthSessionWithUserPool.swift Sending event FetchAuthSessionEvent.throwError
AWSCognitoAuthPlugin/InformSessionError.swift Starting execution
AWSCognitoAuthPlugin/InformSessionError.swift Sending event AuthorizationEvent.receivedSessionError
AWSCognitoAuthPlugin/PersistCredentials.swift Starting execution
AWSCognitoAuthPlugin/StoreCredentials.swift Starting execution
Credential Store state change:

{
    "CredentialStoreState.storingCredentials" =     {
    };
}
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedIn" =         {
            deviceMetadata = "[\"noData\": \"noData\"]";
            signInMethod = "AWSCognitoAuthPlugin.SignInMethod.hostedUI(AWSCognitoAuthPlugin.HostedUIOptions(scopes: [\"openid\", \"email\", \"profile\"], providerInfo: AWSCognitoAuthPlugin.HostedUIProviderInfo(authProvider: Optional(Amplify.AuthProvider.google), idpIdentifier: nil), presentationAnchor: nil, preferPrivateSession: false))";
            signedInDate = "2025-04-19 05:45:06 +0000";
            tokens = "[\"idToken\": \"ey*****mA\", \"expiry\": 2025-04-19 06:45:06 +0000, \"refreshToken\": \"ey*****4Q\", \"accessToken\": \"ey*****ug\"]";
            userId = "93********************************07";
            userName = "Go************************21";
        };
        "AuthorizationState.fetchingAuthSessionWithUserPool" =         {
            "FetchSessionState.notStarted" =             {
            };
        };
        "SignUpState.notStarted" =         {
        };
    };
}
[KeychainStore] Initialized keychain with service=com.amplify.awsCognitoAuthPlugin, attributes=KeychainStoreAttributes(itemClass: "genp", service: "com.amplify.awsCognitoAuthPlugin", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=authConfiguration
[KeychainStore] Successfully retrieved `Data` from the store with key=authConfiguration
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedIn" =         {
            deviceMetadata = "[\"noData\": \"noData\"]";
            signInMethod = "AWSCognitoAuthPlugin.SignInMethod.hostedUI(AWSCognitoAuthPlugin.HostedUIOptions(scopes: [\"openid\", \"email\", \"profile\"], providerInfo: AWSCognitoAuthPlugin.HostedUIProviderInfo(authProvider: Optional(Amplify.AuthProvider.google), idpIdentifier: nil), presentationAnchor: nil, preferPrivateSession: false))";
            signedInDate = "2025-04-19 05:45:06 +0000";
            tokens = "[\"accessToken\": \"ey*****ug\", \"expiry\": 2025-04-19 06:45:06 +0000, \"refreshToken\": \"ey*****4Q\", \"idToken\": \"ey*****mA\"]";
            userId = "93********************************07";
            userName = "Go************************21";
        };
        "AuthorizationState.fetchingAuthSessionWithUserPool" =         {
            "FetchSessionState.error" =             {
                error = "AWSCognitoAuthPlugin.FetchSessionError.noIdentityPool";
            };
        };
        "SignUpState.notStarted" =         {
        };
    };
}
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedIn" =         {
            deviceMetadata = "[\"noData\": \"noData\"]";
            signInMethod = "AWSCognitoAuthPlugin.SignInMethod.hostedUI(AWSCognitoAuthPlugin.HostedUIOptions(scopes: [\"openid\", \"email\", \"profile\"], providerInfo: AWSCognitoAuthPlugin.HostedUIProviderInfo(authProvider: Optional(Amplify.AuthProvider.google), idpIdentifier: nil), presentationAnchor: nil, preferPrivateSession: false))";
            signedInDate = "2025-04-19 05:45:06 +0000";
            tokens = "[\"refreshToken\": \"ey*****4Q\", \"accessToken\": \"ey*****ug\", \"expiry\": 2025-04-19 06:45:06 +0000, \"idToken\": \"ey*****mA\"]";
            userId = "93********************************07";
            userName = "Go************************21";
        };
        "AuthorizationState.storingCredentials" = userPoolOnly;
        "SignUpState.notStarted" =         {
        };
    };
}
[KeychainStore] Started setting `Data` for key=authConfiguration
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Found existing item, updating
[KeychainStore] Successfully updated `Data` in keychain for key=authConfiguration
[KeychainStore] Started setting `Data` for key=amplify.eu-central-*******.session
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Unable to find an existing item, creating new item
[KeychainStore] Successfully added `Data` in keychain for key=amplify.eu-central-*******.session
AWSCognitoAuthPlugin/StoreCredentials.swift Sending event CredentialStoreEvent.completedOperation
AWSCognitoAuthPlugin/IdleCredentialStore.swift Starting execution
AWSCognitoAuthPlugin/PersistCredentials.swift Sending event AuthorizationEvent.sessionEstablished
AWSCognitoAuthPlugin/IdleCredentialStore.swift Sending event CredentialStoreEvent.moveToIdleState
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedIn" =         {
            deviceMetadata = "[\"noData\": \"noData\"]";
            signInMethod = "AWSCognitoAuthPlugin.SignInMethod.hostedUI(AWSCognitoAuthPlugin.HostedUIOptions(scopes: [\"openid\", \"email\", \"profile\"], providerInfo: AWSCognitoAuthPlugin.HostedUIProviderInfo(authProvider: Optional(Amplify.AuthProvider.google), idpIdentifier: nil), presentationAnchor: nil, preferPrivateSession: false))";
            signedInDate = "2025-04-19 05:45:06 +0000";
            tokens = "[\"accessToken\": \"ey*****ug\", \"refreshToken\": \"ey*****4Q\", \"expiry\": 2025-04-19 06:45:06 +0000, \"idToken\": \"ey*****mA\"]";
            userId = "93********************************07";
            userName = "Go************************21";
        };
        "AuthorizationState.sessionEstablished" = userPoolOnly;
        "SignUpState.notStarted" =         {
        };
    };
}
Received result
Credential Store state change:

{
    "CredentialStoreState.success" =     {
        savedData = "AWSCognitoAuthPlugin.CredentialStoreData.amplifyCredentials(userPoolOnly)";
    };
}
Credential Store state change:

{
    "CredentialStoreState.idle" =     {
    };
}
Received result
Successfully completed execution for Auth.socialWebUISignInAPI with result:
AuthSignInResult(nextStep: Amplify.AuthSignInStep.done)
Google sign in successful
Google login successful
User signed in via Hub


Part 2.

Starting execution for Auth.signOutAPI
Check if authstate configured
Auth state configured
Sending signOut event
Waiting for signOut completion
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingOut" =         {
            "SignOutState.notStarted" =             {
            };
        };
        "AuthorizationState.signingOut" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/InitiateSignOut.swift Starting execution
AWSCognitoAuthPlugin/InitiateSignOut.swift Sending event SignOutEvent.invokeHostedUISignOut
AWSCognitoAuthPlugin/ShowHostedUISignOut.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingOut" =         {
            "SignOutState.signingOutHostedUI" =             {
            };
        };
        "AuthorizationState.signingOut" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}

AWSCognitoAuthPlugin/ShowHostedUISignOut.swift Sending event SignOutEvent.revokeToken
AWSCognitoAuthPlugin/RevokeToken.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingOut" =         {
            "SignOutState.revokingToken" =             {
            };
        };
        "AuthorizationState.signingOut" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/RevokeToken.swift Starting revoke token api
AWSCognitoAuthPlugin/RevokeToken.swift Revoke token succeeded
AWSCognitoAuthPlugin/RevokeToken.swift Sending event SignOutEvent.signOutLocally
AWSCognitoAuthPlugin/SignOutLocally.swift Starting execution
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signingOut" =         {
            "SignOutState.signingOutLocally" =             {
            };
        };
        "AuthorizationState.signingOut" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
AWSCognitoAuthPlugin/ClearCredentialStore.swift Starting execution
Credential Store state change:

{
    "CredentialStoreState.clearingCredentials" =     {
    };
}
[KeychainStore] Initialized keychain with service=com.amplify.awsCognitoAuthPlugin, attributes=KeychainStoreAttributes(itemClass: "genp", service: "com.amplify.awsCognitoAuthPlugin", accessGroup: nil), accessGroup=No access group specified
[KeychainStore] Started retrieving `Data` from the store with key=authConfiguration
[KeychainStore] Successfully retrieved `Data` from the store with key=authConfiguration
[KeychainStore] Started setting `Data` for key=authConfiguration
[KeychainStore] Initialized fetching to decide whether update or add
[KeychainStore] Found existing item, updating
[KeychainStore] Successfully updated `Data` in keychain for key=authConfiguration
[KeychainStore] Starting to remove item from keychain with key=amplify.eu-central-*******.session
[KeychainStore] Successfully removed item from keychain
AWSCognitoAuthPlugin/ClearCredentialStore.swift Sending event CredentialStoreEvent.credentialCleared
AWSCognitoAuthPlugin/IdleCredentialStore.swift Starting execution
AWSCognitoAuthPlugin/IdleCredentialStore.swift Sending event CredentialStoreEvent.moveToIdleState
AWSCognitoAuthPlugin/SignOutLocally.swift Sending event SignOutEvent.signedOutSuccess
Auth state change:

{
    "AuthState.configured" =     {
        "AuthenticationState.signedOut" =         {
            lastKnownUserName = "Go************************21";
        };
        "AuthorizationState.configured" =         {
        };
        "SignUpState.notStarted" =         {
        };
    };
}
Credential Store state change:

{
    "CredentialStoreState.clearedCredential" =     {
        clearedDataType = "AWSCognitoAuthPlugin.CredentialStoreDataType.amplifyCredentials";
    };
}
Credential Store state change:

{
    "CredentialStoreState.idle" =     {
    };
}
Successfully completed execution for Auth.signOutAPI with result:
complete
User signed out via Hub
Local signout successful: true
User signed out successfully.

Is this a regression?

Yes

Regression additional context

No response

Platforms

No response

OS Version

iOS16

Device

iPhone 16 simulator and iPhone device

Specific to simulators

No

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    authIssues related to the Auth categoryquestionGeneral question

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions