Защо имате проблема:
Не използвате findOrCreate
метод добре. findOrCreate
може да приема до четири аргумента.findOrCreate(conditions, doc, options, callback)
:
conditions
:Това се използва за указване на филтъра за избор за намиране на документа.doc
[по избор]:Ако документ, който съответства на филтъра за избор (conditions
) не е намерен, тозиdoc
се слива с това, което имате вconditions
и след това се вмъква в DB.options
[по избор]:От кодовата база на плъгина реших, че можете да използватеoptions.upsert
(ако е зададено наtrue
), за да актуализирате документа, ако той вече съществува.callback
:Функцията, изпълнявана след извършване на операцията.
Това, което правите погрешно, е passign { email: profile.emails[0].value }
като трети аргумент, където options
се очаква, трябва да го включите в doc
т.е. вторият аргумент.
Поправката
Опитайте това:
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);
}
);
}
)
);