Hvorfor du har problemet:
Du bruger ikke findOrCreate
metode godt. findOrCreate
kan tage op til fire argumenter.findOrCreate(conditions, doc, options, callback)
:
conditions
:Dette bruges til at angive udvalgsfilteret for at finde dokumentet.doc
[valgfrit]:Hvis et dokument, der matcher selektionsfilteret (conditions
) er ikke fundet, dettedoc
er slået sammen med det, du har iconditions
og derefter indsat i DB.options
[valgfrit]:Fra plugin-kodebasen regnede jeg med, at du kan brugeoptions.upsert
(hvis indstillet tiltrue
) for at opdatere dokumentet, hvis det allerede eksisterer.callback
:Funktionen udført efter handlingen er udført.
Det du gør forkert er at tildele { email: profile.emails[0].value }
som det tredje argument hvor options
forventes, skal du inkludere det i doc
altså det andet argument.
Løsningen
Prøv dette:
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);
}
);
}
)
);