Passport.js - serializeUser 在 lodash 之后找不到用户属性 _.merge
Passport.js - serializeUser doesn't find user properties after lodash _.merge
我在 express 应用程序上实现 serializeUser()
时遇到了一个奇怪的问题。我的数据模型要求单一类型的 "user" 存在于两个模型中,基本上是 Identity
(用户名、密码、角色等),然后是特定于角色的数据,例如 Author
(特定于作者角色的数据)。我通过将 Identity
的 ref (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
,因为它的用法很奇怪),以便访问 [=15] 的 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)
给的是full(串联对象),user._id
returns一个值,但是user._identity
returnsundefined
(并且没有为此返回其他值。是否了解为什么会发生这种情况或我应该采取不同的方法?
注意:这似乎是由 _.merge
调用引起的。我正在使用 lodash v.2.4.2
原来 mongoose 不喜欢尝试 _.merge
两个文档 - 只需使用 document.toObject()
方法就解决了这个问题:
var user = _.merge(identity.toObject(), author.toObject());
还不错!
我在 express 应用程序上实现 serializeUser()
时遇到了一个奇怪的问题。我的数据模型要求单一类型的 "user" 存在于两个模型中,基本上是 Identity
(用户名、密码、角色等),然后是特定于角色的数据,例如 Author
(特定于作者角色的数据)。我通过将 Identity
的 ref (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
,因为它的用法很奇怪),以便访问 [=15] 的 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)
给的是full(串联对象),user._id
returns一个值,但是user._identity
returnsundefined
(并且没有为此返回其他值。是否了解为什么会发生这种情况或我应该采取不同的方法?
注意:这似乎是由 _.merge
调用引起的。我正在使用 lodash v.2.4.2
原来 mongoose 不喜欢尝试 _.merge
两个文档 - 只需使用 document.toObject()
方法就解决了这个问题:
var user = _.merge(identity.toObject(), author.toObject());
还不错!