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

无法在User Controller中获取isLoggedIn中间件设置的req.user数据

问题:无法在控制器中访问req.user(中间件数据传递失败)

实现isLoggedIn中间件后,User Controller中无法访问req.user,既无法在中间件中成功将用户数据存入req.user,也无法将req.user从中间件传递到控制器。

相关代码片段

User Controller代码

exports.getLoggedInUserDetails = BigPromise(async (req, res, next) => {
    const user = await User.findById(req.user.id)
    console.log(user)
    res.status(200).json({
        success:true,
        user
    })
});

User Middleware代码

const User = require('../models/user')
const BigPromise = require("../middleware/bigPromise");
const CustomError = require("../utils/customError");
const jwt = require('jsonwebtoken')

exports.isLoggedIn = BigPromise(async(req,res,next)=>{
    const token = req.cookies.token 
    if (!token) {
        return next(new CustomError("Login first to access this page", 401));
    }

    const decoded = jwt.verify(token , process.env.JWT_SECRET) 
    console.log(decoded)
    req.user = User.findById(decoded.id)  

    next();

})

路由配置

router.route("/userdashboard").get(isLoggedIn, getLoggedInUserDetails);

解决方案

核心问题是中间件中异步操作未等待完成:User.findById(decoded.id)是异步方法,返回Promise对象,未加await直接赋值给req.user会导致req.user是未兑现的Promise,而非实际用户数据。控制器中访问req.user.id时该属性不存在,进而导致后续查询失败。

修正后的中间件代码

const User = require('../models/user')
const BigPromise = require("../middleware/bigPromise");
const CustomError = require("../utils/customError");
const jwt = require('jsonwebtoken')

exports.isLoggedIn = BigPromise(async(req,res,next)=>{
    const token = req.cookies.token 
    if (!token) {
        return next(new CustomError("Login first to access this page", 401));
    }

    const decoded = jwt.verify(token , process.env.JWT_SECRET) 
    // 加上await,等待异步查询完成后获取用户对象
    req.user = await User.findById(decoded.id)  

    next();

})

优化控制器代码(可选)

中间件已完成用户查询并赋值req.user,控制器无需重复查询数据库,直接使用即可:

exports.getLoggedInUserDetails = BigPromise(async (req, res, next) => {
    console.log(req.user)
    res.status(200).json({
        success:true,
        user: req.user
    })
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:20:36