Docs 菜单

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

访问自定义用户数据 - Web SDK

在此页面上

  • 概述
  • 用户对象示例
  • 读取自定义用户数据
  • 输出
  • 修改用户的自定义数据
  • 输出
  • 总结

您可以直接在 Web 应用程序中读取有关应用程序用户的任意数据(称为自定义用户数据)。例如,您可以存储用户的首选语言、出生日期或当地时区。

Realm 会引用关联集群中的 MongoDB 集合来查找给定用户的自定义数据,但不会添加或更新任何自定义用户数据文档。您负责管理和更新集合中的用户数据。有关如何启用和配置自定义用户数据的详细信息,请参阅启用自定义用户数据

本页中的代码示例使用以下尚未设置 custom_data字段的用户对象

{
id: '5f1f216e82df4a7979f9da93',
type: 'normal',
data: { email: 'test@example.com' },
custom_data: {
_id: '5f20d083a37057d55edbdd57',
userID: '5f1f216e82df4a7979f9da93',
description: 'a test document for user: test@example.com',
},
identities: [
{ id: '5f1f216e82df4a7979f9da90', provider_type: 'local-userpass' }
]
}

重要

要使用自定义用户数据,必须首先启用自定义用户数据。

警告

自定义数据可能已过时

如果底层文档发生更改,App Services 不会动态更新用户的自定义数据。相反,只要用户刷新其访问令牌(例如登录时),App Services 都会获取新的数据副本。这可能意味着自定义数据不会立即反映更改内容,例如:来自身份验证触发器的更新。如果未刷新令牌,SDK 将等待30分钟,并在下一次调用后端时刷新令牌,这可能导致自定义用户数据滞后 30 分钟加上 SDK 下一次调用后端之前的时间。

您可以直接从Realm.User.customData属性访问已登录用户的自定义数据的只读副本。

// Access a logged in user's read-only custom data
const customData = app.currentUser.customData;

要手动获取最新版本的用户自定义数据,请调用User.refreshCustomData()。

// Refresh a user's custom data to make sure we have the latest version
await app.currentUser.refreshCustomData();
{
"_id": "5f233a3ac49aca916792de1d",
"description": "a test document for user test@example.com",
"userID": "5f1f298f757611faec901d0f",
"favoriteColor": "pink"
}

注意

要通过客户端或用户函数修改自定义数据字段,必须配置对存储自定义数据的集合的写入权限。如果您希望限制客户端对应用程序中自定义数据的写入权限,您仍然可以通过系统函数修改该对象。

通过更新应用程序的自定义数据集合中的基础文档,您可以修改用户的自定义数据。

下例更新了用户的自定义数据,将 favoriteColor 属性设置为 "purple"

// Get a client object for your app's custom user data collection
const mongo = app.currentUser.mongoClient(CLUSTER_NAME);
const collection = mongo.db(DATABASE_NAME).collection(COLLECTION_NAME);
// Log the user's favorite color before we change it
console.log(
"old favoriteColor: ",
app.currentUser.customData.favoriteColor
);
// Update the user's custom data document
await collection.updateOne(
{ userId: app.currentUser.id }, // Query for the user object of the logged in user
{ $set: { favoriteColor: "purple" } } // Set the logged in user's favorite color to purple
);
// Refresh the user's local customData property
await app.currentUser.refreshCustomData();
// Log the user's new favorite color
console.log(
"new favoriteColor: ",
app.currentUser.customData.favoriteColor
);
old favoriteColor: pink
new favoriteColor: purple
  • 可以使用自定义用户数据来存储有关应用程序用户的信息。

  • 用户对象的自定义用户数据字段是只读的,只能通过 Atlas 服务执行 CRUD 操作来修改。

← 处理多个用户 - Web SDK