Pourquoi vous rencontrez le problème :
Vous n'utilisez pas le findOrCreate
bien la méthode. findOrCreate
peut prendre jusqu'à quatre arguments.findOrCreate(conditions, doc, options, callback)
:
conditions
:Ceci est utilisé pour spécifier le filtre de sélection pour trouver le document.doc
[optionnel] :Si un document qui correspond au filtre de sélection(conditions
) est introuvable, cedoc
est fusionné avec ce que vous avez dansconditions
puis inséré dans la BD.options
[facultatif] :à partir de la base de code du plug-in, j'ai pensé que vous pouvez utiliseroptions.upsert
(si défini surtrue
) pour mettre à jour le document s'il existe déjà.callback
:La fonction exécutée une fois l'opération terminée.
Ce que vous faites de mal est de passer { email: profile.emails[0].value }
comme troisième argument où options
est attendu, vous êtes censé l'inclure dans le doc
c'est-à-dire le deuxième argument.
La solution
Essayez ceci :
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);
}
);
}
)
);