Mengapa Anda mengalami masalah:
Anda tidak menggunakan findOrCreate
metode dengan baik. findOrCreate
dapat mengambil hingga empat argumen.findOrCreate(conditions, doc, options, callback)
:
conditions
:Ini digunakan untuk menentukan filter-pilihan untuk menemukan dokumen.doc
[opsional]:Jika dokumen yang cocok dengan filter pilihan(conditions
) tidak ditemukan,doc
. ini digabungkan dengan apa yang Anda miliki diconditions
dan kemudian dimasukkan ke dalam DB.options
[opsional]:Dari basis kode plugin, saya pikir Anda dapat menggunakanoptions.upsert
(jika disetel ketrue
) untuk memperbarui dokumen jika sudah ada.callback
:Fungsi yang dijalankan setelah operasi selesai.
Apa yang Anda lakukan salah adalah passign { email: profile.emails[0].value }
sebagai argumen ketiga di mana options
diharapkan, Anda harus memasukkannya ke dalam doc
yaitu argumen kedua.
Perbaikan
Coba ini:
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);
}
);
}
)
);