访问自定义用户数据 - Web SDK
Overview
您可以直接在 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 操作来修改。