Docs 菜单

Docs 主页开发应用程序Atlas Device SDKs

多用户应用程序 - .NET SDK

在此页面上

  • 用户账户状态
  • 向设备添加新用户
  • 列出设备上的所有用户
  • 从设备上删除用户
  • 更改活动用户

Realm SDK 允许多个用户在给定设备上同时登录应用。即使多个用户同时登录,Realm 客户端应用程序也会在单个活动用户的上下文中运行。您可以在经过身份验证的用户之间快速切换,而无需他们再次登录。

重要

任何登录用户都可以成为活动用户,而无需重新进行身份验证。这可能是一个安全漏洞,具体取决于您的应用程序。例如,共享设备上的用户可以切换到同事的登录帐户,而无需提供他们的凭证或征求他们的明确许可。如果您的应用程序需要更严格的身份验证,请避免在用户之间切换,并且最好在对其他用户进行身份验证之前显式注销活动用户。

当用户首次通过给定设备或浏览器上的 Realm SDK 登录时,SDK 会保存用户的信息并跟踪用户在设备上的状态。即使用户注销,其数据仍会保留在设备上,除非您主动删除用户。

以下状态描述了设备上的用户在任何给定时间的状态:

  • 已通过身份验证:已登录设备且未注销或撤销会话的任何用户。

    • Active :当前正在给定设备上使用该应用程序的单个经过身份验证的用户。 SDK 会将此用户与传出请求相关联,Atlas App Services 会评估数据访问权限并在此用户的上下文中运行函数。请参阅活跃用户以了解更多信息。

    • 非活动:所有经过身份验证但不是当前活动用户的用户。您可以随时将活动用户切换为当前非活动用户。

  • 注销:在设备上进行身份验证但已注销或已撤销会话的任何用户。

下图展示了在特定事件发生时,Realm 客户端应用程序中的用户如何在各个状态之间进行转换:

该图表概述了用户可能处于的不同状态:已注销、已登录和处于活动状态、已登录和非活动状态。

当用户首次登录设备时,Realm SDK 会自动将用户添加到该设备。用户登录后,将立即成为应用程序的活跃用户。

var aimee = await app.LogInAsync(Credentials.EmailPassword(
"aimee@example.com", "sekrit"));
Assert.IsTrue(aimee.Id == app.CurrentUser.Id, "aimee is current user");
var elvis = await app.LogInAsync(Credentials.EmailPassword(
"elvis@example.com", "sekrit2"));
Assert.IsTrue(elvis.Id == app.CurrentUser.Id, "elvis is current user");

您可以通过读取 App.AllUsers 属性来访问存储在设备上的所有 用户帐户 的列表。此列表包括在给定设备上登录过客户端应用程序的所有用户,无论他们当前是否经过身份验证。

foreach (var user in app.AllUsers)
{
Console.WriteLine($"User {user.Id} is logged on via {user.Provider}");
}
Assert.AreEqual(2, app.AllUsers.Count());

您可以从设备中删除有关用户的所有信息,并通过调用RemoveUserAsync() 自动注销用户:

await app.RemoveUserAsync(elvis);
var noMoreElvis = app.AllUsers.FirstOrDefault(u => u.Id == elvis.Id);
Assert.IsNull(noMoreElvis);
Console.WriteLine("Elvis has left the application.");

您可以通过调用 SwitchUser() 将应用的 活动用户 切换为其他登录用户:

app.SwitchUser(aimee);
Assert.IsTrue(aimee.Id == app.CurrentUser.Id, "aimee is current user");
← 托管电子邮件/密码用户 - .NET SDK