Enable sign-out
Invoke the signOut
api to sign out a user from the Auth category. You can only have one user signed in at a given time.
Future<void> signOutCurrentUser() async { final result = await Amplify.Auth.signOut(); if (result is CognitoCompleteSignOut) { safePrint('Sign out completed successfully'); } else if (result is CognitoFailedSignOut) { safePrint('Error signing user out: ${result.exception.message}'); }}
Calling signOut without any options will delete the local cache of user data and revoke the Amazon Cognito tokens if the application is online. This means that the Cognito refresh token cannot be used anymore to generate new Access and Id Tokens.
Access and Id Tokens are short-lived (60 minutes by default but can be set from 5 minutes to 1 day). After revocation, these tokens cannot be used with Cognito User Pools anymore. However, they are still valid when used with other services like AppSync or API Gateway.
For limiting subsequent calls to these other services after invalidating tokens, we recommend lowering token expiration time for your app client in the Cognito User Pools console. If you are using the Amplify CLI this can be accessed by running amplify console auth
.
Token revocation is enabled automatically on new Amazon Cognito user pools, however existing User Pools must enable this feature, using the Cognito Console or AWS CLI.
Future<void> signOutGlobally() async { final result = await Amplify.Auth.signOut( options: const SignOutOptions(globalSignOut: true), ); if (result is CognitoCompleteSignOut) { safePrint('Sign out completed successfully'); } else if (result is CognitoPartialSignOut) { final globalSignOutException = result.globalSignOutException!; final accessToken = globalSignOutException.accessToken; // Retry the global sign out using the access token, if desired // ... safePrint('Error signing user out: ${globalSignOutException.message}'); } else if (result is CognitoFailedSignOut) { safePrint('Error signing user out: ${result.exception.message}'); }}
Calling signout with globalSignOut = true
will invalidate all the Cognito User Pool tokens of the signed in user. If the user is signed into a device, they won't be authorized to perform a task that requires a valid token when a global signout is called from some other device. They need to sign in again to get valid tokens.