const findOrCreate = require("mongoose-findorcreate"); // User schema const userSchema = new mongoose.Schema({ provider: { type: String, required: true }, email: String, password: String }); userSchema.plugin(findOrCreate); const User = new mongoose.model("User", userSchema); passport.use(User.createStrategy()); //----google-Oauth ----- passport.use(new GoogleStrategy({ clientID: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, callbackURL: "http://localhost:3000/auth/google/secrets", userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo" }, function(accessToken, refreshToken, profile, cb) { User.findOrCreate({ provider: profile.provider, googleId: profile.id }, function (err, user) { console.log(profile.id); return cb(err, user); }); } ));Tengo 2 cuentas de Google, cuando me registro con una, se guarda una identificación en la base de datos para la primera cuenta, pero si me registro con la otra, también podré iniciar sesión, pero la identificación ganó No se guarda en la base de datos, mientras que ambos tienen una identificación generada por Google diferente si registro el perfil. Identificación en la consola (entiendo que la identificación mongodb generada es diferente de la de Google, pero la identificación de la segunda cuenta aún no está guardada en la base de datos). Sin embargo, cuando agregué el campo de identificación en el esquema de usuario (id: String, y también establecí el valor en profile.id en el método findorcreate), las dos cuentas se guardaron con la identificación generada por la base de datos y la identificación de Google en la base de datos. ¿Es que no puedo registrarme con dos cuentas sin configurar otro campo de identificación en el esquema de usuario?
No hay un error: simplemente no ha definido googleId en ninguna parte de su esquema, por lo que está tratando de agregar algo que no existe en el esquema de usuario. Desafortunadamente, debe editar su esquema para agregar los datos de googleId. Si lo desea, tendrá que editar su esquema a algo como esto (como ejemplo)
provider: { type: String, required: true }, email: String, password: String, googleId: {type: Number, required: false} Esto significa que en su función User.findOrCreate() , creará un Usuario con el googleId como profile.id .