使用Discord Passport策略登录时出现User未定义的ReferenceError问题
问题原因及解决方案
错误原因
ReferenceError: User is not defined 这个错误的核心原因是:你在passport.use的回调逻辑里调用了User.findOrCreate,但当前代码中没有引入或定义User这个数据模型。
User一般是你用ORM(比如Mongoose、Sequelize)定义的用户模型,用于操作数据库中的用户数据集合/表。如果没提前将这个模型导入到app.js中,Node.js就找不到User变量,自然会抛出“未定义”的错误。
解决步骤
- 导入User模型
假设你的User模型文件路径是./models/User.js,需要在app.js的顶部添加导入语句:
const User = require('./models/User');
根据你实际的项目文件结构,调整模型文件的路径即可。
- 实现用户查找/创建逻辑
注意:多数ORM(比如Mongoose)本身没有findOrCreate这个内置方法,需要自己实现查找并创建的逻辑:
function(accessToken, refreshToken, profile, cb) { // 先根据discordId查找已有用户 User.findOne({ discordId: profile.id }) .then(existingUser => { if (existingUser) { return cb(null, existingUser); } // 没有找到则创建新用户 return User.create({ discordId: profile.id, username: profile.username, // 可根据需求添加其他字段,比如头像URL、服务器列表等 }); }) .then(newUser => cb(null, newUser)) .catch(err => cb(err, null)); }
如果你使用了passport-local-mongoose这类插件,可能自带findOrCreate方法,但也要确保已正确配置插件并导入模型。
- 确认User模型定义正确
确保你的User模型中已经定义了discordId字段,以Mongoose为例:
// ./models/User.js const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ discordId: { type: String, unique: true, required: true }, username: String, // 其他需要的字段 }); module.exports = mongoose.model('User', userSchema);
内容的提问来源于stack exchange,提问作者TGercken
相关产品推荐
相关产品推荐

