我正在将MongoDB与Node.js,MongoDB一起使用,并且正在对passport.js进行身份验证。
这是我的用户架构:
const userSchema = new mongoose.Schema({
email: String,
password: String,
googleId: String,
facebookId: String,
profilePic: String,
fName: String,
lName: String
});
还有我的Google策略:
passport.use(
new GoogleStrategy(
{
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/google/dashboard",
profileFields: ["id", "displayName", "photos", "email"]
},
function(accessToken, refreshToken, profile, cb) {
console.log(profile);
console.log(profile.photos[0].value);
User.findOrCreate(
{ googleId: profile.id },
{ profilePic: profile.photos[0].value },
{ email: profile.emails[0].value },
function(err, user) {
return cb(err, user);
}
);
}
)
);
我console.log
的搜索结果显示了我的个人资料,以及个人资料照片的网址和个人资料的电子邮件,但我看不到我的电子邮件ID。仅创建了4个字段:
_id
googleId
profilePic
_v
有人可以告诉我如何也保存电子邮件字段吗?
答案 0 :(得分:0)
为什么遇到问题:
您没有很好地使用findOrCreate
方法。 findOrCreate
最多可以包含四个参数。
findOrCreate(conditions, doc, options, callback)
:
conditions
:用于指定选择过滤器
查找文档。doc
[可选]:如果找不到与选择过滤器(conditions
)相匹配的文档,则此doc
与您在{{1}中拥有的内容合并},然后插入数据库。 conditions
[可选]:从插件代码库中,我认为您可以使用
options
(如果设置为options.upsert
)更新文档(如果有)
已经存在。true
:该操作完成后执行的功能。 您做错的是将callback
作为第三个自变量{ email: profile.emails[0].value }
,应该将其包含在options
中,即第二个自变量。
修复
试试这个:
doc