首页 > 解决方案 > 使用单个 JSON Web 令牌在 MongoDB 中创建多个文档

问题描述

编辑:我意识到将这些组件作为子文档添加给我的用户也是可能的。但是,我不确定这是否是最佳做法?大家会推荐什么?

我目前正在构建一个使用 Express、Node 和 MongoDB 来允许用户登录的应用程序。我希望能够调整代码,以便当有人创建帐户时,它会创建两个文档:用户文档,以及与该用户关联的“跟踪器”文档。

我当前的代码使用 JSON Web Tokens。保存用户文档后,我希望能够创建一个具有相同“令牌”数组的“跟踪器”文档,以便我可以轻松地将对该跟踪器文档中的 Express 路由处理数据的访问限制为适当的用户。这是路线,以及在我创建用户实例时运行的代码,它提供 JSON 令牌:

app.post("/users", (req,res) => {
    var body = _.pick(req.body, ['email', 'password']);
    var user = new User(body);

    /// Maybe do tracker.save() here?

    user.save().then(() => {
        return user.generateAuthToken();
    }).then((token) => {
        res.header("x-auth", token).send(user);
    }).catch((e) => {
        res.status(400).send(e);
    });
});

以及创建 Web 令牌的函数:

UserSchema.methods.generateAuthToken = function () {
    var user = this;
    var access = 'auth';
    var token = jwt.sign({_id: user._id.toHexString(), access}, process.env.JWT_SECRET).toString();

    user.tokens = user.tokens.concat([{access, token}]);

    // And then add it to the tracker as well?

    return user.save().then(() => {
        return token;
    });
};

理想情况下,我也希望能够将令牌变量添加到“跟踪器”文档中。问题是,我的“跟踪器”文档尚未创建。

我可以告诉应用程序在创建用户之前创建跟踪器文档,然后将生成的令牌附加到它吗?我该怎么做?我在代码中的注释概述了我的想法。

还是有更好的策略?我不反对将用户及其跟踪数据保存在同一个文档中(可能是跟踪数据的子文档、设置的子文档等),但我不确定这将如何工作。请让我知道你的想法!我的服务器的完整代码在我的 Github 上:https ://github.com/KingOfCramers/boilerplate_jwt_node_api/tree/master/server

标签: javascriptnode.jsmongodbexpressjwt

解决方案


推荐阅读