Managing Mobile App User Accounts with User Identities
Learn how to use Seam user identities to manage mobile app user accounts.
What is a User Identity?
Seam user identities are a feature for tracking and managing user accounts in your application. This feature assigns unique identifiers to each of your users, enabling you to issue and manage their mobile credentials and access permissions. Each user identity is mapped to a user account in your app.
User Identities Can Be Connected to Users in Multiple Access Control Systems
User identities can be linked to one ACS user in each access control system. Any mobile credentials issued to these ACS users are consolidated under the user identity. Consequently, a user's mobile app account has access to these credentials through the user identity.
Create a User Identity and Associate it with an ACS User
Note that if you specify one or more of the user_identity_key, email_address, or phone_number, each of these values must be unique within your workspace.
To delete a user identity, you must first delete any ACS credentials and enrollment automations associated with the user identity. You must also deactivate any associated phones. Then, delete the user identity.
import asyncioasyncdefdelete_user_identity(user_identity_id):# Delete the client sessions. client_sessions =await seam.client_sessions.list( user_identity_id=user_identity_id )for session in client_sessions:await seam.client_sessions.delete( session_id=session['client_session_id'] )# Delete the ACS users and credentials. acs_users =await seam.acs.users.list( user_identity_id=user_identity_id )for acs_user in acs_users: credentials =await seam.acs.credentials.list( acs_user_id=acs_user['acs_user_id'] )for credential in credentials:await seam.acs.credentials.delete( acs_credential_id=credential['acs_credential_id'] )await asyncio.gather(*[wait_for_acs_credential_deleted(credential)for credential in credentials ])await seam.acs.users.delete( acs_user_id=acs_user['acs_user_id'] )await asyncio.gather(*[wait_for_acs_user_deleted(acs_user) for acs_user in acs_users ])# Delete the enrollment automations. enrollment_automations =await seam.user_identities.enrollment_automations.list( user_identity_id=user_identity_id )for automation in enrollment_automations:await seam.user_identities.enrollment_automations.delete( enrollment_automation_id=automation['enrollment_automation_id'] )await asyncio.gather(*[wait_for_enrollment_automation_deleted(automation)for automation in enrollment_automations ])# Delete the phones. phones =await seam.phones.list( owner_user_identity_id=user_identity_id )for phone in phones:await seam.phones.deactivate( device_id=phone['device_id'] )await asyncio.gather(*[wait_for_phone_deactivated(phone) for phone in phones ])# Finally, delete the user identity.await seam.user_identities.delete( user_identity_id=user_identity_id )# Helper functions for waiting on deletion eventsasyncdefwait_for_event(event_type,event_filter):whileTrue: events =await seam.events.list(event_type=event_type)ifany(event_filter(event) for event in events):breakasyncdefwait_for_acs_user_deleted(acs_user):awaitwait_for_event('acs_user.deleted',lambdaevent: 'acs_user_id'in event and event.acs_user_id == acs_user.acs_user_id )asyncdefwait_for_enrollment_automation_deleted(enrollment_automation):awaitwait_for_event('enrollment_automation.deleted',lambdaevent: 'enrollment_automation_id'in event and event.enrollment_automation_id == enrollment_automation.enrollment_automation_id )asyncdefwait_for_acs_credential_deleted(acs_credential):awaitwait_for_event('acs_credential.deleted',lambdaevent: 'acs_credential_id'in event and event.acs_credential_id == acs_credential.acs_credential_id )awaitdelete_user_identity("xxx")