आपको समस्या क्यों हो रही है:
आप findOrCreate
. का उपयोग नहीं कर रहे हैं विधि अच्छी तरह से। findOrCreate
अधिकतम चार तर्क ले सकते हैं।findOrCreate(conditions, doc, options, callback)
:
conditions
:इसका उपयोग दस्तावेज़ को खोजने के लिए चयन-फ़िल्टर को निर्दिष्ट करने के लिए किया जाता है।doc
[वैकल्पिक]:यदि कोई दस्तावेज़ जो चयन-फ़िल्टर से मेल खाता है (conditions
) नहीं मिला, यहdoc
conditions
में आपके पास जो कुछ है, उसके साथ विलय कर दिया गया है और फिर डीबी में डाला।options
[वैकल्पिक]:प्लगइन कोडबेस से, मुझे लगा कि आप उपयोग कर सकते हैंoptions.upsert
(यदिtrue
. पर सेट है ) दस्तावेज़ को अद्यतन करने के लिए यदि यह पहले से मौजूद है।callback
:ऑपरेशन के बाद निष्पादित कार्य किया जाता है।
आप जो गलत कर रहे हैं वह है पासाइन { email: profile.emails[0].value }
तीसरे तर्क के रूप में जहां options
अपेक्षित है, आप इसे doc
. में शामिल करने वाले हैं यानी दूसरा तर्क।
समाधान
इसे आजमाएं:
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 },
// Notice that this function parameter below
// includes both the profilePic and email
{ profilePic: profile.photos[0].value, email: profile.emails[0].value },
function(err, user) {
return cb(err, user);
}
);
}
)
);