Warum das Problem auftritt:
Sie verwenden findOrCreate
nicht Methode gut. findOrCreate
kann bis zu vier Argumente annehmen.findOrCreate(conditions, doc, options, callback)
:
conditions
:Dies wird verwendet, um den Auswahlfilter anzugeben, um das Dokument zu finden.doc
[optional]:Wenn ein Dokument, das dem Auswahlfilter entspricht (conditions
) nicht gefunden wird, diesesdoc
wird mit dem zusammengeführt, was Sie inconditions
haben und dann in die DB eingefügt.options
[optional]:Aus der Plugin-Codebasis habe ich herausgefunden, dass Sieoptions.upsert
verwenden können (wenn auftrue
gesetzt ), um das Dokument zu aktualisieren, falls es bereits vorhanden ist.callback
:Die Funktion, die ausgeführt wird, nachdem die Operation abgeschlossen ist.
Was Sie falsch machen, ist passign { email: profile.emails[0].value }
als drittes Argument, wobei options
erwartet wird, sollten Sie es in das doc
aufnehmen d.h. das zweite Argument.
Die Lösung
Versuchen Sie Folgendes:
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);
}
);
}
)
);