Por que você está tendo o problema:
Você não está usando o
findOrCreate
método bem. findOrCreate
pode receber até quatro argumentos.findOrCreate(conditions, doc, options, callback)
:conditions
:é usado para especificar o filtro de seleção para localizar o documento.doc
[opcional]:Se um documento que corresponde ao filtro de seleção(conditions
) não for encontrado, estedoc
é mesclado com o que você tem emconditions
e, em seguida, inserido no banco de dados.options
[opcional]:Da base de código do plugin, imaginei que você pode usaroptions.upsert
(se definido comotrue
) para atualizar o documento se ele já existir.callback
:A função executada após a conclusão da operação.
O que você está fazendo de errado é passar
{ email: profile.emails[0].value }
como o terceiro argumento onde options
é esperado, você deve incluí-lo no doc
ou seja, o segundo argumento. A correção
Tente isto:
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);
}
);
}
)
);