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

使用Discord Passport策略登录时出现User未定义的ReferenceError问题

问题原因及解决方案

错误原因

ReferenceError: User is not defined 这个错误的核心原因是:你在passport.use的回调逻辑里调用了User.findOrCreate,但当前代码中没有引入或定义User这个数据模型。

User一般是你用ORM(比如Mongoose、Sequelize)定义的用户模型,用于操作数据库中的用户数据集合/表。如果没提前将这个模型导入到app.js中,Node.js就找不到User变量,自然会抛出“未定义”的错误。

解决步骤

  1. 导入User模型
    假设你的User模型文件路径是./models/User.js,需要在app.js的顶部添加导入语句:
const User = require('./models/User');

根据你实际的项目文件结构,调整模型文件的路径即可。

  1. 实现用户查找/创建逻辑
    注意:多数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方法,但也要确保已正确配置插件并导入模型。

  1. 确认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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:36:21