Perché stai riscontrando il problema:
Non stai utilizzando findOrCreate
metodo bene. findOrCreate
può richiedere fino a quattro argomenti.findOrCreate(conditions, doc, options, callback)
:
conditions
:Viene utilizzato per specificare il filtro di selezione per trovare il documento.doc
[opzionale]:se un documento che corrisponde al filtro di selezione(conditions
) non è stato trovato, questodoc
è unito a ciò che hai inconditions
e quindi inserito nel DB.options
[opzionale]:dalla base di codice del plugin, ho pensato che puoi usareoptions.upsert
(se impostato sutrue
) per aggiornare il documento se già esiste.callback
:La funzione eseguita al termine dell'operazione.
Quello che stai sbagliando è passign { email: profile.emails[0].value }
come terzo argomento dove options
è previsto, dovresti includerlo nel doc
cioè il secondo argomento.
La correzione
Prova questo:
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);
}
);
}
)
);