在Atlas集群中使用MongoDB Stitch App处理用户

时间:2019-02-21 19:59:44

标签: reactjs mongodb mongodb-atlas mongodb-stitch mongodb-cluster

我有一个MongoDB Stitch应用程序,该应用程序使用电子邮件/密码身份验证。这会在Stitch应用程序中创建我可以在页面上进行身份验证的用户。我的数据库也有一个MongoDB Atlas集群。在集群中,我有一个带有项目名称的数据库,然后是该项目下的“匹配”集合。因此,当我将“匹配项”插入到集合中时,我可以从Stitch发送经过身份验证的用户ID,这样我就可以查询特定用户的所有匹配项。但是,如何在缝制中向“用户”集合添加其他值?该用户部分已预先打包在Stitch中,并带有您选择的任何身份验证类型(电子邮件/密码)。但是对于我的应用程序,我希望能够在“用户”集合中存储“ MatchesWon”或“ GamePreference”字段之类的内容。

是否应该像在集群中为“匹配”创建“用户”的集合一样,仅插入Stitch提供的用户ID并处理该集合中的字段?好像我将复制用户数据,但是我不确定我是否理解另一种方式。仍在学习,我非常感谢您的反馈/建议。

1 个答案:

答案 0 :(得分:2)

当前没有一种方法可以将您自己的数据存储在内部用户对象上。相反,您可以使用身份验证触发器来管理用户。以下摘录摘自这些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)
    }
};