You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

谷歌社交认证后mLab的MongoDB无法新增用户集合求助(Passport+Mongoose)

Troubleshooting: Google Auth Not Creating User Entries in mLab

Hey there! I’ve run into this exact issue while following Stephen Grider’s full-stack React course too—let’s break down the most common fixes to get your user collection populating:

1. Ensure Your Passport Google Strategy Saves the User

The most likely culprit is that your Passport callback isn’t actually creating a new user in the database. Double-check your passport.js file for this critical logic:

passport.use(new GoogleStrategy({
    clientID: keys.googleClientID,
    clientSecret: keys.googleClientSecret,
    callbackURL: '/auth/google/callback'
  },
  async (accessToken, refreshToken, profile, done) => {
    // First check if the user already exists
    const existingUser = await User.findOne({ googleId: profile.id });
    
    if (existingUser) {
      return done(null, existingUser); // Skip creation if user exists
    }

    // THIS LINE IS KEY: Create and save the new user
    const newUser = await new User({ googleId: profile.id }).save();
    done(null, newUser);
  }
));
  • Make sure you’re using await with Mongoose’s findOne() and save() (they’re asynchronous operations)
  • Confirm that the profile.id is correctly mapped to your User model’s googleId field

2. Verify Your MongoDB Connection

It’s easy to overlook a failed database connection. Update your mongoose.connect call in index.js to add connection status logs:

mongoose.connect(keys.mongoURI)
  .then(() => console.log("✅ Connected to mLab/MongoDB Atlas successfully"))
  .catch(err => console.error("❌ MongoDB connection failed:", err));

Check your server console for these messages—if the connection fails, none of your database operations will work.

3. Confirm Your User Model Is Properly Defined

Head over to models/User.js and make sure you’re correctly creating and exporting the Mongoose model:

const mongoose = require('mongoose');
const { Schema } = mongoose;

// Define the schema with the fields you need (googleId is mandatory here)
const userSchema = new Schema({
  googleId: String
});

// Register the model with Mongoose (this creates the "users" collection in mLab)
mongoose.model('users', userSchema);
  • The model name 'users' (plural) will be the name of your collection in mLab—don’t misspell this!
  • If you only define the schema but don’t call mongoose.model(), Mongoose won’t create the collection.

4. Check Passport Session Middleware Setup

You might be missing the middleware that initializes Passport and manages sessions. Add these lines to your index.js before your auth routes:

app.use(passport.initialize());
app.use(passport.session());

Also, ensure your serialize/deserialize functions are correctly implemented:

passport.serializeUser((user, done) => {
  done(null, user.id); // Uses MongoDB's auto-generated _id for session storage
});

passport.deserializeUser(async (id, done) => {
  const user = await User.findById(id);
  done(null, user);
});

5. Debug with Console Logs

Add logs to your Passport callback to trace exactly where the flow breaks:

async (accessToken, refreshToken, profile, done) => {
  console.log("Received Google Profile:", profile); // Check if profile has a googleId
  const existingUser = await User.findOne({ googleId: profile.id });
  console.log("Existing User Found:", existingUser);
  
  if (existingUser) {
    console.log("Skipping user creation—user already exists");
    return done(null, existingUser);
  }

  const newUser = await new User({ googleId: profile.id }).save();
  console.log("New User Created & Saved:", newUser); // Confirm this runs
  done(null, newUser);
}

Check your server logs after attempting to authenticate—if you don’t see the "New User Created" log, you’ll know exactly which step is failing.

内容的提问来源于stack exchange,提问作者Vikas Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:44:19