在 Atlas 集群中使用 MongoDB Stitch App 处理用户
Handling Users with MongoDB Stitch App within Atlas Cluster
我有一个 MongoDB Stitch 应用程序,它使用 Email/Password 身份验证。这会在 Stitch App 中创建我可以在页面上进行身份验证的用户。我的数据库也有一个 MongoDB Atlas Cluster。在集群中,我有一个带有项目名称的数据库,然后是 'Matches' 下面的集合。因此,当我将 'Matches' 插入集合时,我可以从 Stitch 发送经过身份验证的用户 ID,这样我就有办法查询特定用户的所有匹配项。但是如何在 stitch 中向 'User' 集合添加额外的值?该用户部分在某种程度上预先打包在 Stitch 中,带有您选择的任何身份验证类型 (email/password)。但是对于我的应用程序,我希望能够在 'User' 集合中存储类似 'MatchesWon' 或 'GamePreference' 字段的内容。
我是否应该像在集群中为 'Matches' 创建一个集合一样为 'Users' 创建一个集合,然后只插入从 Stitch 提供的用户 ID 并处理该集合中的字段?好像我会复制用户数据,但我不确定我是否理解另一种方法。仍在学习中,我很感激任何feedback/advice。
目前无法在内部用户对象上存储您自己的数据。相反,您可以使用身份验证触发器来管理用户。以下片段摘自这些 docs.
exports = function(authEvent){
// Only run if this event is for a newly created user.
if (authEvent.operationType !== "CREATE") { return }
// Get the internal `user` document
const { user } = authEvent;
const users = context.services.get("mongodb-atlas")
.db("myApplication")
.collection("users");
const isLinkedUser = user.identities.length > 1;
if (isLinkedUser) {
const { identities } = user;
return users.updateOne(
{ id: user.id },
{ $set: { identities } }
)
} else {
return users.insertOne({ _id: user.id, ...user })
.catch(console.error)
}
};
MongoDB 以非常快的速度进行创新 - 虽然在 2019 年还没有办法优雅地做到这一点,但现在有了。您现在可以在 MongoDB 领域启用自定义用户数据! (https://docs.mongodb.com/realm/users/enable-custom-user-data/)
https://docs.mongodb.com/realm/sdk/node/advanced/access-custom-user-data
const user = context.user;
user.custom_data.primaryLanguage == "English";
--
{
id: '5f1f216e82df4a7979f9da93',
type: 'normal',
custom_data: {
_id: '5f20d083a37057d55edbdd57',
userID: '5f1f216e82df4a7979f9da93',
primaryLanguage: 'English',
},
data: { email: 'test@test.com' },
identities: [
{ id: '5f1f216e82df4a7979f9da90', provider_type: 'local-userpass' }
]
}
--
const customUserData = await user.refreshCustomData()
console.log(customUserData);
我有一个 MongoDB Stitch 应用程序,它使用 Email/Password 身份验证。这会在 Stitch App 中创建我可以在页面上进行身份验证的用户。我的数据库也有一个 MongoDB Atlas Cluster。在集群中,我有一个带有项目名称的数据库,然后是 'Matches' 下面的集合。因此,当我将 'Matches' 插入集合时,我可以从 Stitch 发送经过身份验证的用户 ID,这样我就有办法查询特定用户的所有匹配项。但是如何在 stitch 中向 'User' 集合添加额外的值?该用户部分在某种程度上预先打包在 Stitch 中,带有您选择的任何身份验证类型 (email/password)。但是对于我的应用程序,我希望能够在 'User' 集合中存储类似 'MatchesWon' 或 'GamePreference' 字段的内容。
我是否应该像在集群中为 'Matches' 创建一个集合一样为 'Users' 创建一个集合,然后只插入从 Stitch 提供的用户 ID 并处理该集合中的字段?好像我会复制用户数据,但我不确定我是否理解另一种方法。仍在学习中,我很感激任何feedback/advice。
目前无法在内部用户对象上存储您自己的数据。相反,您可以使用身份验证触发器来管理用户。以下片段摘自这些 docs.
exports = function(authEvent){
// Only run if this event is for a newly created user.
if (authEvent.operationType !== "CREATE") { return }
// Get the internal `user` document
const { user } = authEvent;
const users = context.services.get("mongodb-atlas")
.db("myApplication")
.collection("users");
const isLinkedUser = user.identities.length > 1;
if (isLinkedUser) {
const { identities } = user;
return users.updateOne(
{ id: user.id },
{ $set: { identities } }
)
} else {
return users.insertOne({ _id: user.id, ...user })
.catch(console.error)
}
};
MongoDB 以非常快的速度进行创新 - 虽然在 2019 年还没有办法优雅地做到这一点,但现在有了。您现在可以在 MongoDB 领域启用自定义用户数据! (https://docs.mongodb.com/realm/users/enable-custom-user-data/)
https://docs.mongodb.com/realm/sdk/node/advanced/access-custom-user-data
const user = context.user;
user.custom_data.primaryLanguage == "English";
--
{
id: '5f1f216e82df4a7979f9da93',
type: 'normal',
custom_data: {
_id: '5f20d083a37057d55edbdd57',
userID: '5f1f216e82df4a7979f9da93',
primaryLanguage: 'English',
},
data: { email: 'test@test.com' },
identities: [
{ id: '5f1f216e82df4a7979f9da90', provider_type: 'local-userpass' }
]
}
--
const customUserData = await user.refreshCustomData()
console.log(customUserData);