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

开发Discord机器人仪表盘报req.logIn is not a function错误如何解决

问题修复方案

核心原因1:Express中间件加载顺序错误

你当前在app.js中先挂载了/api路由,再初始化passport中间件,导致路由处理请求时,req对象还没有被passport注入logIn方法,触发报错。

修复步骤:

调整app.js中中间件和路由的加载顺序,修改后代码如下:

require('dotenv').config()
require('./strategies/discord');

const express = require('express');
const passport = require('passport');
const session = require('express-session'); // 新增,需先安装依赖
const app = express();
const mongoose = require('mongoose');
const PORT = process.env.PORT || 3002;
const routes = require('./routes');

mongoose.connect(`${process.env.DATABASE_URL}`, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});

// 新增:先配置session中间件(passport.session依赖此组件)
app.use(session({
    secret: process.env.SESSION_SECRET, // 需在.env文件中添加SESSION_SECRET配置,值为任意随机字符串
    resave: false,
    saveUninitialized: false,
    cookie: { maxAge: 86400000 } // 登录态有效期1天,可自行调整
}))

// passport中间件放在路由之前
app.use(passport.initialize());   
app.use(passport.session());

// 路由放在所有中间件最后挂载
app.use('/api', routes); 

app.listen(PORT, () => console.log(`Running on port ${PORT}`));

先安装缺失的express-session依赖:

npm install express-session

核心原因2:deserializeUser方法存在语法错误

你当前的strategies/discord.js中deserializeUser方法存在变量名冲突、查询参数未定义的问题,会导致登录态解析失败。

修复步骤:

替换原有的deserializeUser代码:

passport.deserializeUser(async (discordId, done) => {
    try {
        const user = await UserDB.findOne({ discordId });
        return user ? done(null, user) : done(null, null);
    } catch (err) {
        console.log(err)
        done(err, null);
    }
});

核心原因3:策略验证函数错误处理不完整

你当前Discord策略的验证函数中,捕获错误后没有调用done(),会导致出错时请求挂起。

修复步骤:

修改strategies/discord.js中验证函数的catch分支:

catch (err) {
    console.log(err);
    return done(err, null);
}

以上修改完成后重启服务即可解决报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:05