From ef53a26cf53a458c3e4a6c51f282cb77d7f48d63 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Tue, 16 Jul 2024 17:56:56 -0400 Subject: [PATCH 01/11] Draft Multi-User Applications page --- ...cations-change-active-user-description.rst | 3 + ...s-list-all-users-on-device-description.rst | 3 + ...ns-remove-user-from-device-description.rst | 3 + ...cations-change-active-user-description.rst | 2 + ...s-list-all-users-on-device-description.rst | 7 + ...ns-remove-user-from-device-description.rst | 2 + ...ns-remove-user-from-device-description.rst | 4 + ...s-add-user-to-device-js-ts-description.rst | 3 + ...s-change-active-user-js-ts-description.rst | 3 + ...-all-users-on-device-js-ts-description.rst | 3 + ...ove-user-from-device-js-ts-description.rst | 2 + ...s-list-all-users-on-device-description.rst | 9 + ...ts-remove-user-from-device-description.rst | 7 + ...tions-change-active-user-not-supported.rst | 1 + ...lications-check-user-state-description.rst | 4 + ...-applications-log-user-out-description.rst | 7 + ...tions-retrieve-active-user-description.rst | 2 + ...er-applications-add-new-user-to-device.rst | 61 +++ ...i-user-applications-change-active-user.rst | 51 +++ ...-applications-list-all-users-on-device.rst | 58 +++ .../multi-user-applications-log-user-out.rst | 57 +++ ...r-applications-remove-user-from-device.rst | 61 +++ ...user-applications-retrieve-active-user.rst | 50 +++ source/sdk/users/multi-user-applications.txt | 407 +++++++++++++++++- 24 files changed, 809 insertions(+), 1 deletion(-) create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-list-all-users-on-device-description.rst create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-remove-user-from-device-description.rst create mode 100644 source/includes/api-details/dart/users/multi-user-applications-change-active-user-description.rst create mode 100644 source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst create mode 100644 source/includes/api-details/dart/users/multi-user-applications-remove-user-from-device-description.rst create mode 100644 source/includes/api-details/java/users/multi-user-applications-remove-user-from-device-description.rst create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-add-user-to-device-js-ts-description.rst create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-change-active-user-js-ts-description.rst create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-list-all-users-on-device-js-ts-description.rst create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-remove-user-from-device-js-ts-description.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-accounts-list-all-users-on-device-description.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-accounts-remove-user-from-device-description.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-change-active-user-not-supported.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-check-user-state-description.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-log-user-out-description.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst create mode 100644 source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst create mode 100644 source/includes/sdk-examples/users/multi-user-applications-change-active-user.rst create mode 100644 source/includes/sdk-examples/users/multi-user-applications-list-all-users-on-device.rst create mode 100644 source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst create mode 100644 source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst create mode 100644 source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst diff --git a/source/includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst new file mode 100644 index 0000000000..fecf495053 --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst @@ -0,0 +1,3 @@ +To change the active user, call +:dotnet-sdk:`SwitchUser() +`. diff --git a/source/includes/api-details/csharp/users/multi-user-applications-list-all-users-on-device-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-list-all-users-on-device-description.rst new file mode 100644 index 0000000000..d7df0b81ce --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-list-all-users-on-device-description.rst @@ -0,0 +1,3 @@ +To list all users on the device, read the +:dotnet-sdk:`App.AllUsers ` +property. diff --git a/source/includes/api-details/csharp/users/multi-user-applications-remove-user-from-device-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-remove-user-from-device-description.rst new file mode 100644 index 0000000000..cb0eadd9bb --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-remove-user-from-device-description.rst @@ -0,0 +1,3 @@ +To log out and remove the user, call +:dotnet-sdk:`RemoveUserAsync() +`. diff --git a/source/includes/api-details/dart/users/multi-user-applications-change-active-user-description.rst b/source/includes/api-details/dart/users/multi-user-applications-change-active-user-description.rst new file mode 100644 index 0000000000..aede4550a4 --- /dev/null +++ b/source/includes/api-details/dart/users/multi-user-applications-change-active-user-description.rst @@ -0,0 +1,2 @@ +To change the active user, call :flutter-sdk:`app.switchUser() +` on the ``User`` object you are switching to: diff --git a/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst b/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst new file mode 100644 index 0000000000..caf52de2a1 --- /dev/null +++ b/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst @@ -0,0 +1,7 @@ +You can access an `Iterable `__ +of all :ref:`user accounts ` that are stored + +To list users on the device, read your app's :flutter-sdk:`App.users +` property. This provides access to an +`Iterable `__ +that includes all users that have logged in to the client app. diff --git a/source/includes/api-details/dart/users/multi-user-applications-remove-user-from-device-description.rst b/source/includes/api-details/dart/users/multi-user-applications-remove-user-from-device-description.rst new file mode 100644 index 0000000000..2c5a2a6682 --- /dev/null +++ b/source/includes/api-details/dart/users/multi-user-applications-remove-user-from-device-description.rst @@ -0,0 +1,2 @@ +To log out and remove the user, pass the ``User`` object to +:flutter-sdk:`app.removeUser() `. diff --git a/source/includes/api-details/java/users/multi-user-applications-remove-user-from-device-description.rst b/source/includes/api-details/java/users/multi-user-applications-remove-user-from-device-description.rst new file mode 100644 index 0000000000..0d7c87012c --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-remove-user-from-device-description.rst @@ -0,0 +1,4 @@ +To remove all information about a user from a device, +use :java-sdk:`user.remove() ` +or :java-sdk:`user.removeAsync() +`. diff --git a/source/includes/api-details/javascript/users/multi-user-applications-add-user-to-device-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-add-user-to-device-js-ts-description.rst new file mode 100644 index 0000000000..e352836d65 --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-add-user-to-device-js-ts-description.rst @@ -0,0 +1,3 @@ +In the example below, a user with the email ``joe@example.com`` logs in and +becomes the active user. Later, a user with the email ``emma@example.com`` +logs in and becomes the active user. diff --git a/source/includes/api-details/javascript/users/multi-user-applications-change-active-user-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-change-active-user-js-ts-description.rst new file mode 100644 index 0000000000..05082e792a --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-change-active-user-js-ts-description.rst @@ -0,0 +1,3 @@ +In the example below, the active user is initially switched to ``user1`` +using the :js-sdk:`Realm.App.switchUser() ` method. +Later, the active user is switched to ``user2``. diff --git a/source/includes/api-details/javascript/users/multi-user-applications-list-all-users-on-device-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-list-all-users-on-device-js-ts-description.rst new file mode 100644 index 0000000000..a39aa2d3f8 --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-list-all-users-on-device-js-ts-description.rst @@ -0,0 +1,3 @@ +In the example below, a developer prints out all the logged-in users on the +device by looping through :js-sdk:`Realm.App.allUsers +`. diff --git a/source/includes/api-details/javascript/users/multi-user-applications-remove-user-from-device-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-remove-user-from-device-js-ts-description.rst new file mode 100644 index 0000000000..f5b1590adb --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-remove-user-from-device-js-ts-description.rst @@ -0,0 +1,2 @@ +In the example below, the current user is removed from the device using the +:js-sdk:`Realm.App.removeUser() ` method. diff --git a/source/includes/api-details/kotlin/users/multi-user-accounts-list-all-users-on-device-description.rst b/source/includes/api-details/kotlin/users/multi-user-accounts-list-all-users-on-device-description.rst new file mode 100644 index 0000000000..4d005cd7f8 --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-accounts-list-all-users-on-device-description.rst @@ -0,0 +1,9 @@ +You can access a map of all known user accounts that are stored on +the device using the +:kotlin-sync-sdk:`app.allUsers() ` +method. This method returns all users that have logged in to the +client app on a given device regardless of whether they are currently +authenticated (the ``user.state`` is ``LOGGED_IN`` or ``LOGGED_OUT``). + +In the following example, the SDK returns both Emma and Joe's +:kotlin-sync-sdk:`user.id `: diff --git a/source/includes/api-details/kotlin/users/multi-user-accounts-remove-user-from-device-description.rst b/source/includes/api-details/kotlin/users/multi-user-accounts-remove-user-from-device-description.rst new file mode 100644 index 0000000000..cdd93a889b --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-accounts-remove-user-from-device-description.rst @@ -0,0 +1,7 @@ +You can actively remove a user, and all information about that user, from +a device using +:kotlin-sync-sdk:`user.remove() `. + +In the following example, Emma is the current (and only) logged-in user +on the device. After we remove her, we confirm that Emma is removed from the +device and that there is no current user, as Joe is still logged out: diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-change-active-user-not-supported.rst b/source/includes/api-details/kotlin/users/multi-user-applications-change-active-user-not-supported.rst new file mode 100644 index 0000000000..7c97773431 --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-applications-change-active-user-not-supported.rst @@ -0,0 +1 @@ +Kotlin does not currently provide a method to switch users. \ No newline at end of file diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-check-user-state-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-check-user-state-description.rst new file mode 100644 index 0000000000..ee57440770 --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-applications-check-user-state-description.rst @@ -0,0 +1,4 @@ +To check the user state, read the +:kotlin-sync-sdk:`user.state +` property. This property is +an enum whose values can be ``LOGGED_OUT``, ``LOGGED_IN``, or ``REMOVED``. diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-log-user-out-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-log-user-out-description.rst new file mode 100644 index 0000000000..e3581875af --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-applications-log-user-out-description.rst @@ -0,0 +1,7 @@ +To log out a logged-in user, call the +:kotlin-sync-sdk:`user.logOut() ` +method. + +In the following example, Joe is currently logged-in as the current user. +After we log Joe out of the app, we confirm that he is still stored on +the device as a user and that Emma is now the current user: diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst new file mode 100644 index 0000000000..20d1a65b57 --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst @@ -0,0 +1,2 @@ +You can retrieve the current active user using :kotlin-sync-sdk:`App.currentUser +`. diff --git a/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst b/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst new file mode 100644 index 0000000000..fc90d08e0a --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst @@ -0,0 +1,61 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-add.cs + :language: csharp + + - id: dart + content: | + + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.email-password-credentials.dart + :language: dart + + - id: java + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.add-a-new-user.java + :language: java + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.add-a-new-user.kt + :language: kotlin + + - id: javascript + content: | + + .. literalinclude:: /examples/MultiUser/AddUser/AddUser.js + :language: javascript + + - id: kotlin + content: | + + In the following example, Joe logs in to the app and becomes the + active user. Then, Emma logs in and replaces Joe as the active user: + + .. io-code-block:: + + .. input:: /examples/generated/kotlin/AuthenticationTest.snippet.add-a-new-user.kt + :language: kotlin + + .. output:: + :language: console + + Successfully logged in. User state: LOGGED_IN. Current user is now: 65133e130075a51f12a9e635 + Successfully logged in. User state: LOGGED_IN. Current user is now: 65133e1357aaf22529343c1b + + - id: swift + content: | + + .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.add-user.swift + :language: swift + + - id: typescript + content: | + + .. literalinclude:: /examples/MultiUser/AddUser/AddUser.ts + :language: typescript diff --git a/source/includes/sdk-examples/users/multi-user-applications-change-active-user.rst b/source/includes/sdk-examples/users/multi-user-applications-change-active-user.rst new file mode 100644 index 0000000000..8792b9901b --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-change-active-user.rst @@ -0,0 +1,51 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-switch.cs + :language: csharp + + - id: dart + content: | + + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.change-active-user.dart + :language: dart + + - id: java + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.switch-the-active-user.java + :language: java + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.switch-the-active-user.kt + :language: kotlin + + - id: javascript + content: | + + .. literalinclude:: /examples/MultiUser/SwitchUser/SwitchUser.js + :language: javascript + + - id: kotlin + content: | + + .. literalinclude:: /examples/MissingPlaceholders/api.kt + :language: kotlin + :copyable: false + + - id: swift + content: | + + .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.switch-user.swift + :language: swift + + - id: typescript + content: | + + .. literalinclude:: /examples/MultiUser/SwitchUser/SwitchUser.ts + :language: typescript diff --git a/source/includes/sdk-examples/users/multi-user-applications-list-all-users-on-device.rst b/source/includes/sdk-examples/users/multi-user-applications-list-all-users-on-device.rst new file mode 100644 index 0000000000..8b7581fdcc --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-list-all-users-on-device.rst @@ -0,0 +1,58 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-list.cs + :language: csharp + + - id: dart + content: | + + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.list-all-users.dart + :language: dart + + - id: java + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.list-all-on-device-users.java + :language: java + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.list-all-on-device-users.kt + :language: kotlin + + - id: javascript + content: | + + .. literalinclude:: /examples/MultiUser/ListUsers/ListUsers.js + :language: javascript + + - id: kotlin + content: | + + .. io-code-block:: + + .. input:: /examples/generated/kotlin/AuthenticationTest.snippet.list-all-users.kt + :language: kotlin + + .. output:: + :language: console + + User on Device 651330cebe1d42b24b8d510f: 65133e1357aaf22529343c1b + User on Device 651330cebe1d42b24b8d510f: 65133e130075a51f12a9e635 + + - id: swift + content: | + + .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.list-users.swift + :language: swift + + - id: typescript + content: | + + .. literalinclude:: /examples/MultiUser/ListUsers/ListUsers.ts + :language: typescript diff --git a/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst b/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst new file mode 100644 index 0000000000..ef9fb68070 --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst @@ -0,0 +1,57 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-switch.cs + :language: csharp + + - id: dart + content: | + + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.change-active-user.dart + :language: dart + + - id: java + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.switch-the-active-user.java + :language: java + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.switch-the-active-user.kt + :language: kotlin + + - id: javascript + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.js + :language: javascript + + - id: kotlin + content: | + + .. io-code-block:: + + .. input:: /examples/generated/kotlin/AuthenticationTest.snippet.log-out-a-user.kt + :language: kotlin + + .. output:: + :language: console + + Successfully logged out user. User state: LOGGED_OUT. Current user is now: 65133e1357aaf22529343c1b + + - id: swift + content: | + + .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.switch-user.swift + :language: swift + + - id: typescript + content: | + + .. literalinclude:: /examples/generated/node/asymmetric-sync.snippet.write-asymmetric-object.ts + :language: typescript diff --git a/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst b/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst new file mode 100644 index 0000000000..25a22d0b9c --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst @@ -0,0 +1,61 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-remove.cs + :language: csharp + + - id: dart + content: | + + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.remove-user.dart + :language: dart + + - id: java + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.remove-a-user-from-device.java + :language: java + :emphasize-lines: 4 + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.remove-a-user-from-device.kt + :language: kotlin + :emphasize-lines: 4 + + - id: javascript + content: | + + .. literalinclude:: /examples/MultiUser/LogoutUser/LogoutUser.js + :language: javascript + :emphasize-lines: 3 + + - id: kotlin + content: | + + .. io-code-block:: + + .. input:: /examples/generated/kotlin/AuthenticationTest.snippet.remove-a-user.kt + :language: kotlin + + .. output:: + :language: console + + Successfully removed user. User state: REMOVED. Current user is now: null + + - id: swift + content: | + + .. literalinclude:: /examples/generated/code/start/Authenticate.snippet.logout.swift + :language: swift + + - id: typescript + content: | + + .. literalinclude:: /examples/MultiUser/LogoutUser/LogoutUser.ts + :language: typescript + :emphasize-lines: 3 diff --git a/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst b/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst new file mode 100644 index 0000000000..7b56fd21d7 --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst @@ -0,0 +1,50 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-switch.cs + :language: csharp + + - id: dart + content: | + + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.change-active-user.dart + :language: dart + + - id: java + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.switch-the-active-user.java + :language: java + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/generated/java/sync/MultipleUsersTest.snippet.switch-the-active-user.kt + :language: kotlin + + - id: javascript + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.js + :language: javascript + + - id: kotlin + content: | + + .. literalinclude:: /examples/generated/kotlin/AuthenticationTest.snippet.retrieve-current-user.kt + :language: kotlin + + - id: swift + content: | + + .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.switch-user.swift + :language: swift + + - id: typescript + content: | + + .. literalinclude:: /examples/generated/node/asymmetric-sync.snippet.write-asymmetric-object.ts + :language: typescript diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index f31968abbe..190a3cbbee 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -4,10 +4,415 @@ Multi-User Applications ======================= +.. meta:: + :description: Provide a short description of the consolidated page. This is critical for SEO. + :keywords: Realm, Flutter SDK, Kotlin SDK, Java SDK, .NET SDK, Node.js SDK, Swift SDK, code example + +.. facet:: + :name: genre + :values: reference + +.. facet:: + :name: programming_language + :values: csharp, dart, java, javascript/typescript, kotlin, swift + .. contents:: On this page :local: :backlinks: none :depth: 2 :class: singlecol -Placeholder page for multi-user application content. +.. tabs-selector:: drivers + +Atlas Device SDK allows multiple :ref:`users ` to be logged in +to an app simultaneously on a given device. Client applications run +in the context of a single active user even if multiple users are logged in +simultaneously. You can quickly switch between authenticated users without +requiring them to log in again. + +.. important:: + + C++ does not currently support multi-user applications. + +.. important:: + + **Any logged in user may become the active user without re-authenticating.** + Depending on your app, this may be a security vulnerability. For example, a + user on a shared device may switch to a coworker's logged in account without + providing their credentials or requiring their explicit permission. If your + application requires stricter authentication, avoid switching between users + and prefer to explicitly log the active user out before authenticating + another user. + +.. _sdks-multi-user-user-account-states: + +User Account States +------------------- + +When a user first logs in through Atlas App Services on a given device or +browser, the SDK saves the user's information and keeps track of the user's +state on the device. The user's data remains on the device, even if they log +out, unless you actively remove the user. + +The following states describe an on-device user at any given time: + +- **Authenticated:** any user that has logged in on the device + and has not logged out or had its session revoked. + + - **Active**: a single authenticated user that is currently using the + app on a given device. The SDK associates this user with outgoing + requests and Atlas evaluates data access permissions and runs Functions in + this user's context. See :ref:`active user ` for more + information. + + - **Inactive**: all authenticated users that are not the current + active user. You switch the active user to a currently inactive user at + any time. + +- **Logged Out:** any user that authenticated on the device but + has since logged out or had their session revoked. + +The following diagram shows how users within a client app +transition between states when certain events occur: + +.. figure:: /images/multi-user.png + :alt: A diagram the outlines the different states a user can be in: logged out, logged in and active, & logged in and inactive. + +.. _sdks-multi-user-account-check-user-state: + +Check User State +~~~~~~~~~~~~~~~~ + +The SDK provides a method to determine the user's current state. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + .. include:: /includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst + + .. tab:: + :tabid: dart + + .. include:: /includes/api-details/dart/crud/create-asymmetric-object-description.rst + + .. tab:: + :tabid: java + + + .. tab:: + :tabid: java-kotlin + + + .. tab:: + :tabid: javascript + + + .. tab:: + :tabid: kotlin + + .. include:: /includes/api-details/kotlin/users/multi-user-applications-check-user-state-description.rst + + .. tab:: + :tabid: swift + + .. tab:: + :tabid: typescript + + +.. _sdks-multi-user-add-new-user-to-device: + +Add a New User to the Device +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The SDK automatically adds users to a device when they log in for the first +time on that device. When a user logs in, they immediately become the +application's active user. For details about authenticating a user, refer to +:ref:`sdks-authenticate-users`. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + + .. tab:: + :tabid: dart + + + .. tab:: + :tabid: java + + + .. tab:: + :tabid: java-kotlin + + + .. tab:: + :tabid: javascript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-add-user-to-device-js-ts-description.rst + + .. tab:: + :tabid: kotlin + + + .. tab:: + :tabid: swift + + + .. tab:: + :tabid: typescript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-add-user-to-device-js-ts-description.rst + +.. include:: /includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst + +.. _sdks-multi-user-list-all-users-on-device: + +List All Users on the Device +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can access a list of all :ref:`user accounts ` that are +stored on the device. This list includes all users that have logged in to the +app on a given device regardless of whether they are currently authenticated. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + .. include:: /includes/api-details/csharp/users/list-all-users-on-device-description.rst + + .. tab:: + :tabid: dart + + .. include:: /includes/api-details/dart/users/list-all-users-on-device-description.rst + + .. tab:: + :tabid: java + + .. tab:: + :tabid: java-kotlin + + .. tab:: + :tabid: javascript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-list-all-users-on-device-js-ts-description.rst + + .. tab:: + :tabid: kotlin + + .. include:: /includes/api-details/kotlin/users/multi-user-applications-list-all-users-on-device-description.rst + + .. tab:: + :tabid: swift + + + .. tab:: + :tabid: typescript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-list-all-users-on-device-js-ts-description.rst + +.. include:: /includes/sdk-examples/users/multi-user-applications-list-all-users-on-device.rst + +.. _sdks-multi-user-retrieve-active-user: + +Retrieve the Active User +~~~~~~~~~~~~~~~~~~~~~~~~ + +You can retrieve the current active user in your app. If multiple users are +logged in, this returns the last valid user that logged in to the device. This +method returns the language's implementation of ``nil`` or ``null`` if there +are no logged-in users. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + + .. tab:: + :tabid: dart + + + .. tab:: + :tabid: java + + + .. tab:: + :tabid: java-kotlin + + + .. tab:: + :tabid: javascript + + + .. tab:: + :tabid: kotlin + + .. include:: /includes/api-details/kotlin/users/retrieve-active-user-description.rst + + .. tab:: + :tabid: swift + + + .. tab:: + :tabid: typescript + + +.. include:: /includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst + +.. _sdks-multi-user-change-active-user: + +Change the Active User +~~~~~~~~~~~~~~~~~~~~~~ + +You can change an app's :ref:`active user ` to another +logged in user at any time. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + .. include:: /includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst + + .. tab:: + :tabid: dart + + .. include:: /includes/api-details/dart/users/change-active-user-description.rst + + .. tab:: + :tabid: java + + + .. tab:: + :tabid: java-kotlin + + + .. tab:: + :tabid: javascript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-change-active-user-js-ts-description.rst + + .. tab:: + :tabid: kotlin + + .. include:: /includes/api-details/kotlin/users/multi-user-applications-change-active-user-not-supported.rst + + .. tab:: + :tabid: swift + + + .. tab:: + :tabid: typescript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-change-active-user-js-ts-description.rst + +.. include:: /includes/sdk-examples/users/multi-user-applications-change-active-user.rst + +.. _sdks-multi-user-log-user-out: + +Log a User Out +~~~~~~~~~~~~~~ + +You can log a logged-in user out of an app. Once logged out, the user is still +stored on the device but must log back in to use the app. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + + .. tab:: + :tabid: dart + + + .. tab:: + :tabid: java + + + .. tab:: + :tabid: java-kotlin + + + .. tab:: + :tabid: javascript + + + .. tab:: + :tabid: kotlin + + .. include:: /includes/api-details/kotlin/users/log-user-out-description.rst + + .. tab:: + :tabid: swift + + + + .. tab:: + :tabid: typescript + + + +.. include:: /includes/sdk-examples/users/multi-user-applications-change-active-user.rst + +For more information on logging a user out of an app, refer to :ref:`sdks-logout`. + +.. _sdks-multi-user-remove-user-from-device: + +Remove a User from the Device +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can remove all information about a user from the device and automatically +log the user out. Once removed, the user must re-authenticate to use the app +again. This *does not* delete the user from Atlas. + +.. tabs-drivers:: + + .. tab:: + :tabid: csharp + + .. include:: /includes/api-details/csharp/users/multi-user-applications-remove-user-from-device-description.rst + + .. tab:: + :tabid: dart + + .. include:: /includes/api-details/dart/users/multi-user-applications-remove-user-from-device-description.rst + + .. tab:: + :tabid: java + + .. include:: /includes/api-details/java/users/multi-user-applications-remove-user-from-device-description.rst + + .. tab:: + :tabid: java-kotlin + + .. include:: /includes/api-details/java/users/multi-user-applications-remove-user-from-device-description.rst + + .. tab:: + :tabid: javascript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-remove-user-from-device-js-ts-description.rst + + .. tab:: + :tabid: kotlin + + .. include:: /includes/api-details/kotlin/users/multi-user-applications-remove-user-from-device-description.rst + + .. tab:: + :tabid: swift + + + .. tab:: + :tabid: typescript + + .. include:: /includes/api-details/javascript/users/multi-user-applications-remove-user-from-device-js-ts-description.rst + +.. include:: /includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst + +For more information on removing and deleting users, refer to +:ref:`sdks-create-and-delete-users`. From 994265f28eb2a5c4e7860da3f9e7a8fa9905265f Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 10:16:24 -0400 Subject: [PATCH 02/11] Fix code example blocks --- .../users/multi-user-applications-log-user-out.rst | 11 ++++++----- ...ulti-user-applications-remove-user-from-device.rst | 3 ++- .../multi-user-applications-retrieve-active-user.rst | 11 +++++++---- source/sdk/users/multi-user-applications.txt | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst b/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst index ef9fb68070..2161abc729 100644 --- a/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst +++ b/source/includes/sdk-examples/users/multi-user-applications-log-user-out.rst @@ -4,13 +4,13 @@ - id: csharp content: | - .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-switch.cs + .. literalinclude:: /examples/generated/dotnet/QuickStartExamples.snippet.logout.cs :language: csharp - id: dart content: | - .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.change-active-user.dart + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.log-out.dart :language: dart - id: java @@ -28,7 +28,7 @@ - id: javascript content: | - .. literalinclude:: /examples/MissingPlaceholders/example.js + .. literalinclude:: /examples/generated/node/authenticate.snippet.logout-current-user.js :language: javascript - id: kotlin @@ -47,11 +47,12 @@ - id: swift content: | - .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.switch-user.swift + .. literalinclude:: /examples/generated/code/start/Authenticate.snippet.logout.swift :language: swift - id: typescript content: | - .. literalinclude:: /examples/generated/node/asymmetric-sync.snippet.write-asymmetric-object.ts + .. literalinclude:: /examples/MissingPlaceholders/example.ts :language: typescript + :copyable: false diff --git a/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst b/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst index 25a22d0b9c..c4a63a5ecc 100644 --- a/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst +++ b/source/includes/sdk-examples/users/multi-user-applications-remove-user-from-device.rst @@ -50,8 +50,9 @@ - id: swift content: | - .. literalinclude:: /examples/generated/code/start/Authenticate.snippet.logout.swift + .. literalinclude:: /examples/MissingPlaceholders/example.swift :language: swift + :copyable: false - id: typescript content: | diff --git a/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst b/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst index 7b56fd21d7..3e66b6e858 100644 --- a/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst +++ b/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst @@ -4,13 +4,14 @@ - id: csharp content: | - .. literalinclude:: /examples/generated/dotnet/MultiUserExamples.snippet.multi-switch.cs + .. literalinclude:: /examples/MissingPlaceholders/example.cs :language: csharp + :copyable: false - id: dart content: | - .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.change-active-user.dart + .. literalinclude:: /examples/generated/flutter/authenticate_users_test.snippet.retrieve-current-user.dart :language: dart - id: java @@ -40,11 +41,13 @@ - id: swift content: | - .. literalinclude:: /examples/generated/code/start/MultipleUsers.snippet.switch-user.swift + .. literalinclude:: /examples/MissingPlaceholders/example.swift :language: swift + :copyable: false - id: typescript content: | - .. literalinclude:: /examples/generated/node/asymmetric-sync.snippet.write-asymmetric-object.ts + .. literalinclude:: /examples/MissingPlaceholders/example.ts :language: typescript + :copyable: false diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 190a3cbbee..922f1beea6 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -358,7 +358,7 @@ stored on the device but must log back in to use the app. -.. include:: /includes/sdk-examples/users/multi-user-applications-change-active-user.rst +.. include:: /includes/sdk-examples/users/multi-user-applications-log-user-out.rst For more information on logging a user out of an app, refer to :ref:`sdks-logout`. From f228412eb5b2ebe374e00f0bfd8b2b497eb418e8 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 10:25:05 -0400 Subject: [PATCH 03/11] Fix include paths to resolve snooty build errors --- ...ations-list-all-users-on-device-description.rst} | 0 ...cations-remove-user-from-device-description.rst} | 0 ...-applications-add-user-to-device-description.rst | 3 +++ source/sdk/users/multi-user-applications.txt | 13 +++++++------ 4 files changed, 10 insertions(+), 6 deletions(-) rename source/includes/api-details/kotlin/users/{multi-user-accounts-list-all-users-on-device-description.rst => multi-user-applications-list-all-users-on-device-description.rst} (100%) rename source/includes/api-details/kotlin/users/{multi-user-accounts-remove-user-from-device-description.rst => multi-user-applications-remove-user-from-device-description.rst} (100%) create mode 100644 source/includes/api-details/swift/users/multi-user-applications-add-user-to-device-description.rst diff --git a/source/includes/api-details/kotlin/users/multi-user-accounts-list-all-users-on-device-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-list-all-users-on-device-description.rst similarity index 100% rename from source/includes/api-details/kotlin/users/multi-user-accounts-list-all-users-on-device-description.rst rename to source/includes/api-details/kotlin/users/multi-user-applications-list-all-users-on-device-description.rst diff --git a/source/includes/api-details/kotlin/users/multi-user-accounts-remove-user-from-device-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-remove-user-from-device-description.rst similarity index 100% rename from source/includes/api-details/kotlin/users/multi-user-accounts-remove-user-from-device-description.rst rename to source/includes/api-details/kotlin/users/multi-user-applications-remove-user-from-device-description.rst diff --git a/source/includes/api-details/swift/users/multi-user-applications-add-user-to-device-description.rst b/source/includes/api-details/swift/users/multi-user-applications-add-user-to-device-description.rst new file mode 100644 index 0000000000..e352836d65 --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-add-user-to-device-description.rst @@ -0,0 +1,3 @@ +In the example below, a user with the email ``joe@example.com`` logs in and +becomes the active user. Later, a user with the email ``emma@example.com`` +logs in and becomes the active user. diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 922f1beea6..f8beb611bc 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -95,7 +95,7 @@ The SDK provides a method to determine the user's current state. .. tab:: :tabid: dart - .. include:: /includes/api-details/dart/crud/create-asymmetric-object-description.rst + .. tab:: :tabid: java @@ -161,6 +161,7 @@ application's active user. For details about authenticating a user, refer to .. tab:: :tabid: swift + .. include:: /includes/api-details/swift/users/multi-user-applications-add-user-to-device-description.rst .. tab:: :tabid: typescript @@ -183,12 +184,12 @@ app on a given device regardless of whether they are currently authenticated. .. tab:: :tabid: csharp - .. include:: /includes/api-details/csharp/users/list-all-users-on-device-description.rst + .. include:: /includes/api-details/csharp/users/multi-user-applications-list-all-users-on-device-description.rst .. tab:: :tabid: dart - .. include:: /includes/api-details/dart/users/list-all-users-on-device-description.rst + .. include:: /includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst .. tab:: :tabid: java @@ -252,7 +253,7 @@ are no logged-in users. .. tab:: :tabid: kotlin - .. include:: /includes/api-details/kotlin/users/retrieve-active-user-description.rst + .. include:: /includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst .. tab:: :tabid: swift @@ -282,7 +283,7 @@ logged in user at any time. .. tab:: :tabid: dart - .. include:: /includes/api-details/dart/users/change-active-user-description.rst + .. include:: /includes/api-details/dart/users/multi-user-applications-change-active-user-description.rst .. tab:: :tabid: java @@ -346,7 +347,7 @@ stored on the device but must log back in to use the app. .. tab:: :tabid: kotlin - .. include:: /includes/api-details/kotlin/users/log-user-out-description.rst + .. include:: /includes/api-details/kotlin/users/multi-user-applications-log-user-out-description.rst .. tab:: :tabid: swift From 133d7242e8144c6943a11f1ee671e566270a22d2 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 11:08:27 -0400 Subject: [PATCH 04/11] Add missing Swift API descriptions --- ...ications-change-active-user-description.rst | 1 + ...plications-check-user-state-description.rst | 3 +++ ...ns-list-all-users-on-device-description.rst | 8 ++++++++ ...r-applications-log-user-out-description.rst | 4 ++++ ...ons-remove-user-from-device-description.rst | 4 ++++ ...ations-retrieve-active-user-description.rst | 3 +++ source/sdk/users/multi-user-applications.txt | 18 ++++++++++++++---- 7 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 source/includes/api-details/swift/users/multi-user-applications-change-active-user-description.rst create mode 100644 source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst create mode 100644 source/includes/api-details/swift/users/multi-user-applications-list-all-users-on-device-description.rst create mode 100644 source/includes/api-details/swift/users/multi-user-applications-log-user-out-description.rst create mode 100644 source/includes/api-details/swift/users/multi-user-applications-remove-user-from-device-description.rst create mode 100644 source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst diff --git a/source/includes/api-details/swift/users/multi-user-applications-change-active-user-description.rst b/source/includes/api-details/swift/users/multi-user-applications-change-active-user-description.rst new file mode 100644 index 0000000000..7c19a81538 --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-change-active-user-description.rst @@ -0,0 +1 @@ +You can change the active user with the ``App.switch(to: User)`` method. \ No newline at end of file diff --git a/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst b/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst new file mode 100644 index 0000000000..c6ff825d26 --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst @@ -0,0 +1,3 @@ +To check the user state, read the ``user.state`` property. This property is +an :objc-sdk:`RLMUserState ` enum whose values +reflect whether the user is logged out, logged in, or removed. diff --git a/source/includes/api-details/swift/users/multi-user-applications-list-all-users-on-device-description.rst b/source/includes/api-details/swift/users/multi-user-applications-list-all-users-on-device-description.rst new file mode 100644 index 0000000000..b22e2986d0 --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-list-all-users-on-device-description.rst @@ -0,0 +1,8 @@ +You can access a map of all known user accounts that are stored on +the device through the ``app.allUsers`` property. This property returns all +users that have logged in to the client app on a given device regardless of +whether they are currently authenticated (the ``user.state`` is logged in or +logged out). + +In the following example, the SDK returns both Emma and Joe's +:objc-sdk:`user.identifier `: diff --git a/source/includes/api-details/swift/users/multi-user-applications-log-user-out-description.rst b/source/includes/api-details/swift/users/multi-user-applications-log-user-out-description.rst new file mode 100644 index 0000000000..15495375ed --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-log-user-out-description.rst @@ -0,0 +1,4 @@ +To log out a logged-in user, call the +:swift-sdk:`user.logOut() +` +method. diff --git a/source/includes/api-details/swift/users/multi-user-applications-remove-user-from-device-description.rst b/source/includes/api-details/swift/users/multi-user-applications-remove-user-from-device-description.rst new file mode 100644 index 0000000000..1abb9bc4a4 --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-remove-user-from-device-description.rst @@ -0,0 +1,4 @@ +You can actively remove a user, and all information about that user, from +a device using +:swift-sdk:`user.remove() +`. diff --git a/source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst new file mode 100644 index 0000000000..217aa6777f --- /dev/null +++ b/source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst @@ -0,0 +1,3 @@ +You can retrieve the current active user through the +:objc-sdk:`App.currentUser +` property. diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index f8beb611bc..9bcac36899 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -83,7 +83,7 @@ transition between states when certain events occur: Check User State ~~~~~~~~~~~~~~~~ -The SDK provides a method to determine the user's current state. +The SDK provides a property you can check to determine the user's current state. .. tabs-drivers:: @@ -117,6 +117,8 @@ The SDK provides a method to determine the user's current state. .. tab:: :tabid: swift + .. include:: /includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst + .. tab:: :tabid: typescript @@ -210,6 +212,7 @@ app on a given device regardless of whether they are currently authenticated. .. tab:: :tabid: swift + .. include:: /includes/api-details/swift/users/multi-user-applications-list-all-users-on-device-description.rst .. tab:: :tabid: typescript @@ -258,6 +261,7 @@ are no logged-in users. .. tab:: :tabid: swift + .. include:: /includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst .. tab:: :tabid: typescript @@ -306,6 +310,7 @@ logged in user at any time. .. tab:: :tabid: swift + .. include:: /includes/api-details/swift/users/multi-user-applications-change-active-user-description.rst .. tab:: :tabid: typescript @@ -320,7 +325,9 @@ Log a User Out ~~~~~~~~~~~~~~ You can log a logged-in user out of an app. Once logged out, the user is still -stored on the device but must log back in to use the app. +stored on the device but must log back in to use the app. If another logged-in +user exists on the device, logging a user out automatically sets the remaining +logged-in user as the active user. .. tabs-drivers:: @@ -352,7 +359,7 @@ stored on the device but must log back in to use the app. .. tab:: :tabid: swift - + .. include:: /includes/api-details/swift/users/multi-user-applications-log-user-out-description.rst .. tab:: :tabid: typescript @@ -370,7 +377,9 @@ Remove a User from the Device You can remove all information about a user from the device and automatically log the user out. Once removed, the user must re-authenticate to use the app -again. This *does not* delete the user from Atlas. +again. This *does not* delete the user from Atlas. If another logged-in +user exists on the device, removing a user out automatically sets the remaining +logged-in user as the active user. .. tabs-drivers:: @@ -407,6 +416,7 @@ again. This *does not* delete the user from Atlas. .. tab:: :tabid: swift + .. include:: /includes/api-details/swift/users/multi-user-applications-remove-user-from-device-description.rst .. tab:: :tabid: typescript From fbffcaa1c608a5d2937907fe51b4d61cb4891235 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 12:14:51 -0400 Subject: [PATCH 05/11] Add missing Dart API descriptions --- ...multi-user-applications-check-user-state-description.rst | 4 ++++ .../multi-user-applications-log-user-out-description.rst | 2 ++ ...i-user-applications-retrieve-active-user-description.rst | 2 ++ ...multi-user-applications-check-user-state-description.rst | 6 +++--- source/sdk/users/multi-user-applications.txt | 6 ++++-- 5 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 source/includes/api-details/dart/users/multi-user-applications-check-user-state-description.rst create mode 100644 source/includes/api-details/dart/users/multi-user-applications-log-user-out-description.rst create mode 100644 source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst diff --git a/source/includes/api-details/dart/users/multi-user-applications-check-user-state-description.rst b/source/includes/api-details/dart/users/multi-user-applications-check-user-state-description.rst new file mode 100644 index 0000000000..bcf7856594 --- /dev/null +++ b/source/includes/api-details/dart/users/multi-user-applications-check-user-state-description.rst @@ -0,0 +1,4 @@ +You can check the user's state through the :flutter-sdk:`User.state +` property. This property's value is a +:flutter-sdk:`UserState ` enum whose values indicate +whether the user is ``loggedOut``, ``loggedIn``, or ``removed``. diff --git a/source/includes/api-details/dart/users/multi-user-applications-log-user-out-description.rst b/source/includes/api-details/dart/users/multi-user-applications-log-user-out-description.rst new file mode 100644 index 0000000000..de09866576 --- /dev/null +++ b/source/includes/api-details/dart/users/multi-user-applications-log-user-out-description.rst @@ -0,0 +1,2 @@ +To log out a logged-in user, call the :flutter-sdk:`user.logOut() +` method. diff --git a/source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst new file mode 100644 index 0000000000..e70afa82da --- /dev/null +++ b/source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst @@ -0,0 +1,2 @@ +You can retrieve the current active user through the +:flutter-sdk:`App.currentUser ` property. diff --git a/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst b/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst index c6ff825d26..65243be5a3 100644 --- a/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst +++ b/source/includes/api-details/swift/users/multi-user-applications-check-user-state-description.rst @@ -1,3 +1,3 @@ -To check the user state, read the ``user.state`` property. This property is -an :objc-sdk:`RLMUserState ` enum whose values -reflect whether the user is logged out, logged in, or removed. +To check the user state, read the ``user.state`` property. This property's +value is an :objc-sdk:`RLMUserState ` enum whose +cases reflect whether the user is logged out, logged in, or removed. diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 9bcac36899..14b9efa4c9 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -90,12 +90,12 @@ The SDK provides a property you can check to determine the user's current state. .. tab:: :tabid: csharp - .. include:: /includes/api-details/csharp/users/multi-user-applications-change-active-user-description.rst + .. tab:: :tabid: dart - + .. include:: /includes/api-details/dart/users/multi-user-applications-check-user-state-description.rst .. tab:: :tabid: java @@ -240,6 +240,7 @@ are no logged-in users. .. tab:: :tabid: dart + .. include:: /includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst .. tab:: :tabid: java @@ -338,6 +339,7 @@ logged-in user as the active user. .. tab:: :tabid: dart + .. include:: /includes/api-details/dart/users/multi-user-applications-log-user-out-description.rst .. tab:: :tabid: java From 7b63afe01999ab3c7afb06431ecf098950a747ac Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 12:27:16 -0400 Subject: [PATCH 06/11] Add missing C# API descriptions --- ...-user-applications-add-user-to-device-description.rst | 3 +++ ...ti-user-applications-check-user-state-description.rst | 5 +++++ .../multi-user-applications-log-user-out-description.rst | 2 ++ ...ser-applications-retrieve-active-user-description.rst | 3 +++ source/sdk/users/multi-user-applications.txt | 9 ++++++--- 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-add-user-to-device-description.rst create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-check-user-state-description.rst create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-log-user-out-description.rst create mode 100644 source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst diff --git a/source/includes/api-details/csharp/users/multi-user-applications-add-user-to-device-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-add-user-to-device-description.rst new file mode 100644 index 0000000000..c1bb97cc31 --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-add-user-to-device-description.rst @@ -0,0 +1,3 @@ +In the example below, a user with the email ``aimee@example.com`` logs in and +becomes the active user. Later, a user with the email ``elvis@example.com`` +logs in and becomes the active user. diff --git a/source/includes/api-details/csharp/users/multi-user-applications-check-user-state-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-check-user-state-description.rst new file mode 100644 index 0000000000..cf7b3c8fcf --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-check-user-state-description.rst @@ -0,0 +1,5 @@ +You can check the user's state through the :dotnet-sdk:`User.State +` property. This +property's value is a :dotnet-sdk:`UserState +` enum whose values indicate +whether the user is ``LoggedOut``, ``LoggedIn``, or ``Removed``. diff --git a/source/includes/api-details/csharp/users/multi-user-applications-log-user-out-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-log-user-out-description.rst new file mode 100644 index 0000000000..c0bb1efa32 --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-log-user-out-description.rst @@ -0,0 +1,2 @@ +To log out a logged-in user, call :dotnet-sdk:`User.LogOutAsync() +`. diff --git a/source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst new file mode 100644 index 0000000000..286e975cc5 --- /dev/null +++ b/source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst @@ -0,0 +1,3 @@ +You can retrieve the current active user through the +:dotnet-sdk:`App.CurrentUser +` property. diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 14b9efa4c9..1fc05e651d 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -90,7 +90,7 @@ The SDK provides a property you can check to determine the user's current state. .. tab:: :tabid: csharp - + .. include:: /includes/api-details/csharp/users/multi-user-applications-check-user-state-description.rst .. tab:: :tabid: dart @@ -138,7 +138,8 @@ application's active user. For details about authenticating a user, refer to .. tab:: :tabid: csharp - + .. include:: /includes/api-details/csharp/users/multi-user-applications-add-user-to-device-description.rst + .. tab:: :tabid: dart @@ -236,6 +237,7 @@ are no logged-in users. .. tab:: :tabid: csharp + .. include:: /includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst .. tab:: :tabid: dart @@ -335,7 +337,8 @@ logged-in user as the active user. .. tab:: :tabid: csharp - + .. include:: /includes/api-details/csharp/users/multi-user-applications-log-user-out-description.rst + .. tab:: :tabid: dart From fffc0f9e1e383d7a4e6c8c408fd2746b59e3c8c3 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 14:53:13 -0400 Subject: [PATCH 07/11] Add missing Java API descriptions --- ...applications-add-user-to-device-description.rst | 2 ++ ...applications-change-active-user-description.rst | 3 +++ ...r-applications-check-user-state-description.rst | 5 +++++ ...ations-list-all-users-on-device-description.rst | 2 ++ ...-user-applications-log-user-out-description.rst | 3 +++ ...plications-retrieve-active-user-description.rst | 2 ++ source/sdk/users/multi-user-applications.txt | 14 ++++++++++++++ 7 files changed, 31 insertions(+) create mode 100644 source/includes/api-details/java/users/multi-user-applications-add-user-to-device-description.rst create mode 100644 source/includes/api-details/java/users/multi-user-applications-change-active-user-description.rst create mode 100644 source/includes/api-details/java/users/multi-user-applications-check-user-state-description.rst create mode 100644 source/includes/api-details/java/users/multi-user-applications-list-all-users-on-device-description.rst create mode 100644 source/includes/api-details/java/users/multi-user-applications-log-user-out-description.rst create mode 100644 source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst diff --git a/source/includes/api-details/java/users/multi-user-applications-add-user-to-device-description.rst b/source/includes/api-details/java/users/multi-user-applications-add-user-to-device-description.rst new file mode 100644 index 0000000000..25ad77e4d5 --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-add-user-to-device-description.rst @@ -0,0 +1,2 @@ +In the example below, a user named Joe logs in and becomes the active user. +Later, a user named Emma logs in and becomes the active user. diff --git a/source/includes/api-details/java/users/multi-user-applications-change-active-user-description.rst b/source/includes/api-details/java/users/multi-user-applications-change-active-user-description.rst new file mode 100644 index 0000000000..e4dd0b8461 --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-change-active-user-description.rst @@ -0,0 +1,3 @@ +To change the active user, call :java-sdk:`App.switchUser() +` with the new +user's ``User`` object. diff --git a/source/includes/api-details/java/users/multi-user-applications-check-user-state-description.rst b/source/includes/api-details/java/users/multi-user-applications-check-user-state-description.rst new file mode 100644 index 0000000000..01d1861970 --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-check-user-state-description.rst @@ -0,0 +1,5 @@ +You can check the user's state by calling the :java-sdk:`User.getState() +` method. This +property's value is a :java-sdk:`User.State +` enum whose values indicate +whether the user is ``LOGGED_IN``, ``REMOVED``, or ``LOGGED_OUT``. diff --git a/source/includes/api-details/java/users/multi-user-applications-list-all-users-on-device-description.rst b/source/includes/api-details/java/users/multi-user-applications-list-all-users-on-device-description.rst new file mode 100644 index 0000000000..a831c49915 --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-list-all-users-on-device-description.rst @@ -0,0 +1,2 @@ +To list all users on the device, call the +:java-sdk:`App.allUsers() ` method. diff --git a/source/includes/api-details/java/users/multi-user-applications-log-user-out-description.rst b/source/includes/api-details/java/users/multi-user-applications-log-user-out-description.rst new file mode 100644 index 0000000000..84df266845 --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-log-user-out-description.rst @@ -0,0 +1,3 @@ +To log the user out, call :java-sdk:`User.logOut() +` or :java-sdk:`User.logOutAsync() +`. diff --git a/source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst new file mode 100644 index 0000000000..2a27920ae6 --- /dev/null +++ b/source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst @@ -0,0 +1,2 @@ +You can retrieve the current active user by calling the +:java-sdk:`App.currentUser() ` method. diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 1fc05e651d..6f8a954338 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -100,10 +100,12 @@ The SDK provides a property you can check to determine the user's current state. .. tab:: :tabid: java + .. include:: /includes/api-details/java/users/multi-user-applications-check-user-state-description.rst .. tab:: :tabid: java-kotlin + .. include:: /includes/api-details/java/users/multi-user-applications-check-user-state-description.rst .. tab:: :tabid: javascript @@ -147,10 +149,12 @@ application's active user. For details about authenticating a user, refer to .. tab:: :tabid: java + .. include:: /includes/api-details/java/users/multi-user-applications-add-user-to-device-description.rst .. tab:: :tabid: java-kotlin + .. include:: /includes/api-details/java/users/multi-user-applications-add-user-to-device-description.rst .. tab:: :tabid: javascript @@ -197,9 +201,13 @@ app on a given device regardless of whether they are currently authenticated. .. tab:: :tabid: java + .. include:: /includes/api-details/java/users/multi-user-applications-list-all-users-on-device-description.rst + .. tab:: :tabid: java-kotlin + .. include:: /includes/api-details/java/users/multi-user-applications-list-all-users-on-device-description.rst + .. tab:: :tabid: javascript @@ -247,10 +255,12 @@ are no logged-in users. .. tab:: :tabid: java + .. include:: /includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst .. tab:: :tabid: java-kotlin + .. include:: /includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst .. tab:: :tabid: javascript @@ -295,10 +305,12 @@ logged in user at any time. .. tab:: :tabid: java + .. include:: /includes/api-details/java/users/multi-user-applications-change-active-user-description.rst .. tab:: :tabid: java-kotlin + .. include:: /includes/api-details/java/users/multi-user-applications-change-active-user-description.rst .. tab:: :tabid: javascript @@ -347,10 +359,12 @@ logged-in user as the active user. .. tab:: :tabid: java + .. include:: /includes/api-details/java/users/multi-user-applications-log-user-out-description.rst .. tab:: :tabid: java-kotlin + .. include:: /includes/api-details/java/users/multi-user-applications-log-user-out-description.rst .. tab:: :tabid: javascript From f36217099f545331d71681748cbd01627a02c931 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 16:29:28 -0400 Subject: [PATCH 08/11] Add missing JS/TS API descriptions --- ...ser-applications-check-user-state-js-ts-description.rst | 4 ++++ ...ti-user-applications-log-user-out-js-ts-description.rst | 2 ++ ...applications-retrieve-active-user-js-ts-description.rst | 2 ++ source/sdk/users/multi-user-applications.txt | 7 ++++++- 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-check-user-state-js-ts-description.rst create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-log-user-out-js-ts-description.rst create mode 100644 source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst diff --git a/source/includes/api-details/javascript/users/multi-user-applications-check-user-state-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-check-user-state-js-ts-description.rst new file mode 100644 index 0000000000..c49e91e5a6 --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-check-user-state-js-ts-description.rst @@ -0,0 +1,4 @@ +You can check the user's state through the :js-sdk:`User.state +` property. This property's value is a +:js-sdk:`UserState ` enum whose values indicate +whether the user is ``LoggedIn``, ``LoggedOut``, or ``Removed``. \ No newline at end of file diff --git a/source/includes/api-details/javascript/users/multi-user-applications-log-user-out-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-log-user-out-js-ts-description.rst new file mode 100644 index 0000000000..b31fef8fdc --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-log-user-out-js-ts-description.rst @@ -0,0 +1,2 @@ +To log out a logged-in user, call the :js-sdk:`User.logOut() +` method. diff --git a/source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst new file mode 100644 index 0000000000..8a1db64023 --- /dev/null +++ b/source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst @@ -0,0 +1,2 @@ +You can retrieve the current active user through the +:js-sdk:`App.currentUser() ` accessor. diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 6f8a954338..9404bb63ab 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -110,6 +110,7 @@ The SDK provides a property you can check to determine the user's current state. .. tab:: :tabid: javascript + .. include:: /includes/api-details/javascript/users/multi-user-applications-check-user-state-js-ts-description.rst .. tab:: :tabid: kotlin @@ -124,6 +125,7 @@ The SDK provides a property you can check to determine the user's current state. .. tab:: :tabid: typescript + .. include:: /includes/api-details/typescript/users/multi-user-applications-check-user-state-js-ts-description.rst .. _sdks-multi-user-add-new-user-to-device: @@ -265,6 +267,7 @@ are no logged-in users. .. tab:: :tabid: javascript + .. include:: /includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst .. tab:: :tabid: kotlin @@ -279,6 +282,7 @@ are no logged-in users. .. tab:: :tabid: typescript + .. include:: /includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst .. include:: /includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst @@ -369,6 +373,7 @@ logged-in user as the active user. .. tab:: :tabid: javascript + .. include:: /includes/api-details/javascript/users/multi-user-applications-log-user-out-js-ts-description.rst .. tab:: :tabid: kotlin @@ -383,7 +388,7 @@ logged-in user as the active user. .. tab:: :tabid: typescript - + .. include:: /includes/api-details/javascript/users/multi-user-applications-log-user-out-js-ts-description.rst .. include:: /includes/sdk-examples/users/multi-user-applications-log-user-out.rst From ecda3ff6b692f1da7a1ed9fe91a875097d9c1323 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Wed, 17 Jul 2024 16:44:42 -0400 Subject: [PATCH 09/11] Finishing touches --- ...lications-get-active-user-description.rst} | 2 +- ...lications-get-active-user-description.rst} | 2 +- ...lications-get-active-user-description.rst} | 2 +- ...ons-get-active-user-js-ts-description.rst} | 2 +- ...cations-add-user-to-device-description.rst | 2 + ...plications-get-active-user-description.rst | 2 + ...tions-retrieve-active-user-description.rst | 2 - ...lications-get-active-user-description.rst} | 2 +- ...er-applications-add-new-user-to-device.rst | 3 - ...lti-user-applications-check-user-state.rst | 58 +++++++++++++++++++ ...lti-user-applications-get-active-user.rst} | 0 source/sdk/users/multi-user-applications.txt | 45 +++++++------- 12 files changed, 92 insertions(+), 30 deletions(-) rename source/includes/api-details/csharp/users/{multi-user-applications-retrieve-active-user-description.rst => multi-user-applications-get-active-user-description.rst} (65%) rename source/includes/api-details/dart/users/{multi-user-applications-retrieve-active-user-description.rst => multi-user-applications-get-active-user-description.rst} (56%) rename source/includes/api-details/java/users/{multi-user-applications-retrieve-active-user-description.rst => multi-user-applications-get-active-user-description.rst} (58%) rename source/includes/api-details/javascript/users/{multi-user-applications-retrieve-active-user-js-ts-description.rst => multi-user-applications-get-active-user-js-ts-description.rst} (59%) create mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-add-user-to-device-description.rst create mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-get-active-user-description.rst delete mode 100644 source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst rename source/includes/api-details/swift/users/{multi-user-applications-retrieve-active-user-description.rst => multi-user-applications-get-active-user-description.rst} (63%) create mode 100644 source/includes/sdk-examples/users/multi-user-applications-check-user-state.rst rename source/includes/sdk-examples/users/{multi-user-applications-retrieve-active-user.rst => multi-user-applications-get-active-user.rst} (100%) diff --git a/source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/csharp/users/multi-user-applications-get-active-user-description.rst similarity index 65% rename from source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst rename to source/includes/api-details/csharp/users/multi-user-applications-get-active-user-description.rst index 286e975cc5..c41ab7d021 100644 --- a/source/includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst +++ b/source/includes/api-details/csharp/users/multi-user-applications-get-active-user-description.rst @@ -1,3 +1,3 @@ -You can retrieve the current active user through the +You can get the current active user through the :dotnet-sdk:`App.CurrentUser ` property. diff --git a/source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/dart/users/multi-user-applications-get-active-user-description.rst similarity index 56% rename from source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst rename to source/includes/api-details/dart/users/multi-user-applications-get-active-user-description.rst index e70afa82da..e52a18b381 100644 --- a/source/includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst +++ b/source/includes/api-details/dart/users/multi-user-applications-get-active-user-description.rst @@ -1,2 +1,2 @@ -You can retrieve the current active user through the +You can get the current active user through the :flutter-sdk:`App.currentUser ` property. diff --git a/source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/java/users/multi-user-applications-get-active-user-description.rst similarity index 58% rename from source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst rename to source/includes/api-details/java/users/multi-user-applications-get-active-user-description.rst index 2a27920ae6..8fc3a49b0a 100644 --- a/source/includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst +++ b/source/includes/api-details/java/users/multi-user-applications-get-active-user-description.rst @@ -1,2 +1,2 @@ -You can retrieve the current active user by calling the +You can get the current active user by calling the :java-sdk:`App.currentUser() ` method. diff --git a/source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst b/source/includes/api-details/javascript/users/multi-user-applications-get-active-user-js-ts-description.rst similarity index 59% rename from source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst rename to source/includes/api-details/javascript/users/multi-user-applications-get-active-user-js-ts-description.rst index 8a1db64023..eaf7e08046 100644 --- a/source/includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst +++ b/source/includes/api-details/javascript/users/multi-user-applications-get-active-user-js-ts-description.rst @@ -1,2 +1,2 @@ -You can retrieve the current active user through the +You can get the current active user through the :js-sdk:`App.currentUser() ` accessor. diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-add-user-to-device-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-add-user-to-device-description.rst new file mode 100644 index 0000000000..888091f83f --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-applications-add-user-to-device-description.rst @@ -0,0 +1,2 @@ +In the following example, Joe logs in to the app and becomes the +active user. Then, Emma logs in and replaces Joe as the active user. diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-get-active-user-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-get-active-user-description.rst new file mode 100644 index 0000000000..0ebb1539b4 --- /dev/null +++ b/source/includes/api-details/kotlin/users/multi-user-applications-get-active-user-description.rst @@ -0,0 +1,2 @@ +You can get the current active user using :kotlin-sync-sdk:`App.currentUser +`. diff --git a/source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst deleted file mode 100644 index 20d1a65b57..0000000000 --- a/source/includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst +++ /dev/null @@ -1,2 +0,0 @@ -You can retrieve the current active user using :kotlin-sync-sdk:`App.currentUser -`. diff --git a/source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst b/source/includes/api-details/swift/users/multi-user-applications-get-active-user-description.rst similarity index 63% rename from source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst rename to source/includes/api-details/swift/users/multi-user-applications-get-active-user-description.rst index 217aa6777f..955034f1d8 100644 --- a/source/includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst +++ b/source/includes/api-details/swift/users/multi-user-applications-get-active-user-description.rst @@ -1,3 +1,3 @@ -You can retrieve the current active user through the +You can get the current active user through the :objc-sdk:`App.currentUser ` property. diff --git a/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst b/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst index fc90d08e0a..baaaa451ff 100644 --- a/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst +++ b/source/includes/sdk-examples/users/multi-user-applications-add-new-user-to-device.rst @@ -34,9 +34,6 @@ - id: kotlin content: | - In the following example, Joe logs in to the app and becomes the - active user. Then, Emma logs in and replaces Joe as the active user: - .. io-code-block:: .. input:: /examples/generated/kotlin/AuthenticationTest.snippet.add-a-new-user.kt diff --git a/source/includes/sdk-examples/users/multi-user-applications-check-user-state.rst b/source/includes/sdk-examples/users/multi-user-applications-check-user-state.rst new file mode 100644 index 0000000000..5c42fac49b --- /dev/null +++ b/source/includes/sdk-examples/users/multi-user-applications-check-user-state.rst @@ -0,0 +1,58 @@ +.. tabs-drivers:: + + tabs: + - id: csharp + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.cs + :language: csharp + :copyable: false + + - id: dart + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.dart + :language: dart + :copyable: false + + - id: java + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.java + :language: java + :copyable: false + + - id: java-kotlin + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example-java-kotlin.kt + :language: kotlin + :copyable: false + + - id: javascript + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.js + :language: javascript + :copyable: false + + - id: kotlin + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.kt + :language: kotlin + :copyable: false + + - id: swift + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.swift + :language: swift + :copyable: false + + - id: typescript + content: | + + .. literalinclude:: /examples/MissingPlaceholders/example.ts + :language: typescript + :copyable: false diff --git a/source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst b/source/includes/sdk-examples/users/multi-user-applications-get-active-user.rst similarity index 100% rename from source/includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst rename to source/includes/sdk-examples/users/multi-user-applications-get-active-user.rst diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index 9404bb63ab..b4066200b9 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -5,7 +5,7 @@ Multi-User Applications ======================= .. meta:: - :description: Provide a short description of the consolidated page. This is critical for SEO. + :description: Build an app that supports multiple users, including the ability switch the active user, with Atlas Device SDK. :keywords: Realm, Flutter SDK, Kotlin SDK, Java SDK, .NET SDK, Node.js SDK, Swift SDK, code example .. facet:: @@ -125,18 +125,22 @@ The SDK provides a property you can check to determine the user's current state. .. tab:: :tabid: typescript - .. include:: /includes/api-details/typescript/users/multi-user-applications-check-user-state-js-ts-description.rst + .. include:: /includes/api-details/javascript/users/multi-user-applications-check-user-state-js-ts-description.rst + +.. include:: /includes/sdk-examples/users/multi-user-applications-check-user-state.rst .. _sdks-multi-user-add-new-user-to-device: Add a New User to the Device -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +---------------------------- The SDK automatically adds users to a device when they log in for the first time on that device. When a user logs in, they immediately become the application's active user. For details about authenticating a user, refer to :ref:`sdks-authenticate-users`. +.. TODO: Add an API description to the Dart tab in the consolidation gaps follow-up ticket when we update the code example + .. tabs-drivers:: .. tab:: @@ -166,6 +170,7 @@ application's active user. For details about authenticating a user, refer to .. tab:: :tabid: kotlin + .. include:: /includes/api-details/kotlin/users/multi-user-applications-add-user-to-device-description.rst .. tab:: :tabid: swift @@ -182,7 +187,7 @@ application's active user. For details about authenticating a user, refer to .. _sdks-multi-user-list-all-users-on-device: List All Users on the Device -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +---------------------------- You can access a list of all :ref:`user accounts ` that are stored on the device. This list includes all users that have logged in to the @@ -232,12 +237,12 @@ app on a given device regardless of whether they are currently authenticated. .. include:: /includes/sdk-examples/users/multi-user-applications-list-all-users-on-device.rst -.. _sdks-multi-user-retrieve-active-user: +.. _sdks-multi-user-get-active-user: -Retrieve the Active User -~~~~~~~~~~~~~~~~~~~~~~~~ +Get the Active User +------------------- -You can retrieve the current active user in your app. If multiple users are +You can get the current active user in your app. If multiple users are logged in, this returns the last valid user that logged in to the device. This method returns the language's implementation of ``nil`` or ``null`` if there are no logged-in users. @@ -247,49 +252,49 @@ are no logged-in users. .. tab:: :tabid: csharp - .. include:: /includes/api-details/csharp/users/multi-user-applications-retrieve-active-user-description.rst + .. include:: /includes/api-details/csharp/users/multi-user-applications-get-active-user-description.rst .. tab:: :tabid: dart - .. include:: /includes/api-details/dart/users/multi-user-applications-retrieve-active-user-description.rst + .. include:: /includes/api-details/dart/users/multi-user-applications-get-active-user-description.rst .. tab:: :tabid: java - .. include:: /includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst + .. include:: /includes/api-details/java/users/multi-user-applications-get-active-user-description.rst .. tab:: :tabid: java-kotlin - .. include:: /includes/api-details/java/users/multi-user-applications-retrieve-active-user-description.rst + .. include:: /includes/api-details/java/users/multi-user-applications-get-active-user-description.rst .. tab:: :tabid: javascript - .. include:: /includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst + .. include:: /includes/api-details/javascript/users/multi-user-applications-get-active-user-js-ts-description.rst .. tab:: :tabid: kotlin - .. include:: /includes/api-details/kotlin/users/multi-user-applications-retrieve-active-user-description.rst + .. include:: /includes/api-details/kotlin/users/multi-user-applications-get-active-user-description.rst .. tab:: :tabid: swift - .. include:: /includes/api-details/swift/users/multi-user-applications-retrieve-active-user-description.rst + .. include:: /includes/api-details/swift/users/multi-user-applications-get-active-user-description.rst .. tab:: :tabid: typescript - .. include:: /includes/api-details/javascript/users/multi-user-applications-retrieve-active-user-js-ts-description.rst + .. include:: /includes/api-details/javascript/users/multi-user-applications-get-active-user-js-ts-description.rst -.. include:: /includes/sdk-examples/users/multi-user-applications-retrieve-active-user.rst +.. include:: /includes/sdk-examples/users/multi-user-applications-get-active-user.rst .. _sdks-multi-user-change-active-user: Change the Active User -~~~~~~~~~~~~~~~~~~~~~~ +---------------------- You can change an app's :ref:`active user ` to another logged in user at any time. @@ -341,7 +346,7 @@ logged in user at any time. .. _sdks-multi-user-log-user-out: Log a User Out -~~~~~~~~~~~~~~ +-------------- You can log a logged-in user out of an app. Once logged out, the user is still stored on the device but must log back in to use the app. If another logged-in @@ -397,7 +402,7 @@ For more information on logging a user out of an app, refer to :ref:`sdks-logout .. _sdks-multi-user-remove-user-from-device: Remove a User from the Device -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +----------------------------- You can remove all information about a user from the device and automatically log the user out. Once removed, the user must re-authenticate to use the app From 64027cf701a64c84efe486d4fc884ef2e1ba6caa Mon Sep 17 00:00:00 2001 From: Dachary Date: Fri, 19 Jul 2024 12:35:19 -0400 Subject: [PATCH 10/11] Apply suggestions from review Co-authored-by: cbullinger <115956901+cbullinger@users.noreply.github.com> --- source/sdk/users/multi-user-applications.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/sdk/users/multi-user-applications.txt b/source/sdk/users/multi-user-applications.txt index b4066200b9..2b4cdee6e6 100644 --- a/source/sdk/users/multi-user-applications.txt +++ b/source/sdk/users/multi-user-applications.txt @@ -36,7 +36,7 @@ requiring them to log in again. .. important:: - **Any logged in user may become the active user without re-authenticating.** + **Any logged-in user may become the active user without re-authenticating.** Depending on your app, this may be a security vulnerability. For example, a user on a shared device may switch to a coworker's logged in account without providing their credentials or requiring their explicit permission. If your @@ -297,7 +297,7 @@ Change the Active User ---------------------- You can change an app's :ref:`active user ` to another -logged in user at any time. +logged-in user at any time. .. tabs-drivers:: @@ -397,7 +397,7 @@ logged-in user as the active user. .. include:: /includes/sdk-examples/users/multi-user-applications-log-user-out.rst -For more information on logging a user out of an app, refer to :ref:`sdks-logout`. +For more information, refer to :ref:`sdks-logout`. .. _sdks-multi-user-remove-user-from-device: From 824087bf39d410d9d5218d937327439174dc9822 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Fri, 19 Jul 2024 13:54:38 -0400 Subject: [PATCH 11/11] Apply feedback from review --- ...-user-applications-list-all-users-on-device-description.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst b/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst index caf52de2a1..b42f117d96 100644 --- a/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst +++ b/source/includes/api-details/dart/users/multi-user-applications-list-all-users-on-device-description.rst @@ -1,6 +1,3 @@ -You can access an `Iterable `__ -of all :ref:`user accounts ` that are stored - To list users on the device, read your app's :flutter-sdk:`App.users ` property. This provides access to an `Iterable `__