Varför du har problemet:
Du använder inte findOrCreate
metod väl. findOrCreate
kan ta upp till fyra argument.findOrCreate(conditions, doc, options, callback)
:
conditions
:Detta används för att ange urvalsfiltret för att hitta dokumentet.doc
[valfritt]:Om ett dokument som matchar urvalsfiltret (conditions
) hittades inte, dettadoc
slås samman med vad du har iconditions
och sedan infogas i DB.options
[valfritt]:Från plugin-kodbasen kom jag på att du kan användaoptions.upsert
(om inställt påtrue
) för att uppdatera dokumentet om det redan finns.callback
:Funktionen som körs efter att operationen är klar.
Det du gör fel är att tilldela { email: profile.emails[0].value }
som det tredje argumentet där options
förväntas, är det meningen att du ska inkludera det i doc
dvs det andra argumentet.
Åtgärden
Prova detta:
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);
}
);
}
)
);