Por qué tiene el problema:
No está utilizando findOrCreate
método bien. findOrCreate
puede aceptar hasta cuatro argumentos.findOrCreate(conditions, doc, options, callback)
:
conditions
:Esto se usa para especificar el filtro de selección para encontrar el documento.doc
[opcional]:si un documento coincide con el filtro de selección (conditions
) no se encuentra, estedoc
se fusiona con lo que tienes enconditions
y luego insertado en la base de datos.options
[opcional]:desde el código base del complemento, pensé que puedes usaroptions.upsert
(si se establece entrue
) para actualizar el documento si ya existe.callback
:La función ejecutada después de que se realiza la operación.
Lo que estás haciendo mal es pasar { email: profile.emails[0].value }
como tercer argumento donde options
se espera, se supone que debe incluirlo en el doc
es decir, el segundo argumento.
La solución
Prueba esto:
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);
}
);
}
)
);