Tại sao bạn gặp sự cố:
Bạn không sử dụng findOrCreate
phương pháp tốt. findOrCreate
có thể có tối đa bốn đối số.
findOrCreate(conditions, doc, options, callback)
:
-
conditions
:Điều này được sử dụng để chỉ định bộ lọc lựa chọn để tìm tài liệu. -
doc
[tùy chọn]:Nếu tài liệu phù hợp với bộ lọc lựa chọn (conditions
) không được tìm thấy,doc
này được hợp nhất với những gì bạn có trongconditions
và sau đó được chèn vào DB. -
options
[tùy chọn]:Từ cơ sở mã plugin, tôi nghĩ rằng bạn có thể sử dụngoptions.upsert
(nếu được đặt thànhtrue
) để cập nhật tài liệu nếu nó đã tồn tại. -
callback
:Hàm thực thi sau khi thực hiện xong thao tác.
Điều bạn đang làm sai là mật mã { email: profile.emails[0].value }
làm đối số thứ ba trong đó options
dự kiến, bạn phải đưa nó vào doc
tức là đối số thứ hai.
Cách khắc phục
Hãy thử điều này:
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);
}
);
}
)
);