使用passport.js与passport-local-mongoose登录失败,报Mongoose保存回调错误
问题排查与解决方案
核心原因
你遇到的MongooseError Model.prototype.save() no longer accepts a callback错误,是因为Mongoose v6+版本已移除save()方法的回调参数支持,但当前使用的passport-local-mongoose版本仍依赖旧的回调式save逻辑,两者版本不兼容导致登录流程触发错误。
解决步骤
1. 更新passport-local-mongoose至兼容版本
执行命令更新依赖,确保其适配Mongoose v6+:
npm update passport-local-mongoose # 或直接安装最新版 npm install passport-local-mongoose@latest
2. 确认User模型配置正确
登录路由代码本身无问题,但需确保User模型正确集成passport-local-mongoose插件,示例配置如下:
const mongoose = require('mongoose'); const passportLocalMongoose = require('passport-local-mongoose'); const UserSchema = new mongoose.Schema({ // 自定义字段(如邮箱、昵称等) }); // 必须启用passport-local-mongoose插件 UserSchema.plugin(passportLocalMongoose); module.exports = mongoose.model('User', UserSchema);
3. 验证Passport初始化逻辑
确保项目入口文件中正确关联Passport与User模型,示例代码:
const passport = require('passport'); const User = require('./models/User'); passport.use(User.createStrategy()); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser());
额外排查点
若更新后仍报错,可尝试:
- 删除
node_modules和package-lock.json,重新执行npm install清理依赖缓存 - 确认Mongoose版本与passport-local-mongoose的兼容关系(当前最新版passport-local-mongoose已支持Mongoose v6/v7)
内容的提问来源于stack exchange,提问作者feruz00
相关产品推荐
相关产品推荐

