【问题标题】:Passport.js - serializeUser doesn't find user properties after lodash _.mergePassport.js - serializeUser 在 lodash _.merge 之后找不到用户属性
【发布时间】:2017-03-03 05:24:33
【问题描述】:

在我的 express 应用上实现 serializeUser() 时遇到一个奇怪的问题。我的数据模型要求在两个模型中存在单一类型的“用户”,基本上是 Identity(用户名、密码、角色等),然后是特定于角色的数据,例如 Author(特定于作者角色)。我通过将Identity 的引用(ObjectID)存储在我的Author 模型中来解决这个问题。因此,我的注册功能如下所示(简化):

// Mongoose will just take what it needs for each model
var identity = new Identity(req.body);
var author = new Author(req.body);

identity.save(function(err) {
    if (!err) {

        // Save reference to identity
        author._identity = identity._id;

        // Save author document, then login
        author.save(function (err) {

            // create new "user" object from both identity and author objects
            var user = _.merge(identity, author);
            req.login(user, function(err) { res.json(user); });
        });
    }
});

这工作正常,一切都很好地存储在 mongo 中。但是,对于serializeUser(),我想存储user._identity,而不是user._id(或user.id,因为它的用法很奇怪),以便访问Identity 文档的ObjectID,而不是Author 文档:

passport.serializeUser(function(user, done) {
    console.log('user', user);           // returns full, concatenated object
    console.log('_id', user._id);          // returns ObjectID value
    console.log('_iden', user._identity);  // returns undefined

    // breaks with a "Failed to serialize user into session" error
    done(null, user._identity);
});

奇怪的是console.log(user) 给出了完整的(连接对象),而user._id 返回了一个值,但user._identity 返回了undefined(并且没有为此返回其他值。任何洞察原因这可能正在发生还是我应该采取不同的方法?

注意:这似乎是由_.merge 调用引起的。我正在使用 lodash v.2.4.2

【问题讨论】:

  • 能否请您发布您的user schema,以及您如何deserializing 用户。
  • 尝试在_.merge(identity, author);之后输出console.log(user),看看indentity是否被初始化
  • @John identity 已初始化 - 奇怪的是只有 user.id 具有分配值,而不是来自 identity 对象或 author 对象的属性...
  • 我更喜欢自己构建一个json。也许合并不够好

标签: node.js express mongoose passport.js lodash


【解决方案1】:

原来 mongoose 不喜欢尝试 _.merge 两个文档 - 只需使用 document.toObject() 方法即可解决此问题:

var user = _.merge(identity.toObject(), author.toObject());

一点也不差!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2015-02-27
    • 2018-03-26
    • 2020-02-17
    相关资源
    最近更新 更多