Dlaczego masz problem:
Nie używasz findOrCreate
metoda dobrze. findOrCreate
może przyjąć do czterech argumentów.findOrCreate(conditions, doc, options, callback)
:
conditions
:Jest używany do określenia filtra wyboru w celu znalezienia dokumentu.doc
[opcjonalne]:Jeśli dokument, który pasuje do filtra wyboru(conditions
) nie został znaleziony, tendoc
jest połączony z tym, co masz wconditions
a następnie włożony do DB.options
[opcjonalne]:Z bazy kodu wtyczek doszedłem do wniosku, że możesz użyćoptions.upsert
(jeśli ustawione natrue
), aby zaktualizować dokument, jeśli już istnieje.callback
:Funkcja wykonywana po wykonaniu operacji.
To, co robisz źle, to passign { email: profile.emails[0].value }
jako trzeci argument, gdzie options
jest oczekiwany, powinieneś dołączyć go do doc
czyli drugi argument.
Poprawka
Spróbuj tego:
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);
}
);
}
)
);