Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

处理多个用户 - Web SDK

在此页面上

  • Overview
  • 用户账户状态
  • 为设备添加新用户
  • 列出设备上的所有用户
  • 切换活跃用户
  • 从设备上删除用户

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

重要

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

当用户首次通过给定浏览器上的 Realm SDK 登录时,SDK 会保存用户的信息并跟踪用户的状态。 即使用户注销,他们的数据也会保留在本地存储中,除非您主动删除用户或清除浏览器中的数据。

以下状态描述了被跟踪用户在任何特定时间的状态:

  • 经过身份验证:在浏览器上已登录且未注销或已撤销会话的任何用户。

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

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

  • 已注销:在浏览器上经过身份验证但已注销或已撤销会话的任何用户。

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

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

当用户首次登录浏览器时, Realm 软件开发工具包(Realm SDK)会自动将用户数据保存到浏览器的本地存储中。 用户登录后,将立即成为应用程序的活跃用户。

// Register Joe
const joeEmail = "joe@example.com";
const joePassword = "passw0rd";
await app.emailPasswordAuth.registerUser({
email: joeEmail,
password: joePassword,
});
// Log in as Joe
const joeCredentials = Realm.Credentials.emailPassword(
joeEmail,
joePassword
);
const joe = await app.logIn(joeCredentials);
// The active user is now Joe
console.assert(joe.id === app.currentUser.id);
// Register Emma
const emmaEmail = "emma@example.com";
const emmaPassword = "passw0rd";
await app.emailPasswordAuth.registerUser({
email: emmaEmail,
password: emmaPassword,
});
// Log in as Emma
const emmaCredentials = Realm.Credentials.emailPassword(
emmaEmail,
emmaPassword
);
const emma = await app.logIn(emmaCredentials);
// The active user is now Emma, but Joe is still logged in
console.assert(emma.id === app.currentUser.id);

您可以访问与浏览器关联的所有用户账户列表。该列表包含登录过客户端应用程序的所有用户,不论他们当前是否处于验证状态。

// Get an object with all Users, where the keys are the User IDs
for (const userId in app.allUsers) {
const user = app.allUsers[userId];
console.log(
`User with id ${user.id} is ${
user.isLoggedIn ? "logged in" : "logged out"
}`
);
}

您可以随时将应用程序的活跃用户快速切换成其他登录用户。

// Get some logged-in users
const authenticatedUsers = Object.values(app.allUsers).filter(
(user) => user.isLoggedIn
);
const user1 = authenticatedUsers[0];
const user2 = authenticatedUsers[1];
// Switch to user1
app.switchUser(user1);
// The active user is now user1
console.assert(app.currentUser.id === user1.id);
// Switch to user2
app.switchUser(user2);
// The active user is now user2
console.assert(app.currentUser.id === user2.id);

您可以从浏览器中删除用户的所有信息,并自动注销用户。

// Remove the current user from the device
const user = app.currentUser;
await app.removeUser(user);
// The user is no longer the active user
if (app.currentUser) {
// The active user is now the logged in user (if there still is one) that was
// most recently active
console.assert(user.id !== app.currentUser.id);
}
// The user is no longer on the device
console.assert(
Object.values(app.allUsers).find(({ id }) => id === user.id) === undefined
);

后退

管理电子邮件/密码用户