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

如何将Express认证中间件中的用户ID传递至路由处理函数?

如何在路由处理函数中获取认证中间件里的用户ID?

当然有办法啦!其实Express的请求对象req是贯穿整个请求处理流程的,你可以把用户ID(或者整个用户对象)直接挂载到req上,这样后续的路由处理函数就能轻松访问到它了。

步骤1:修改认证中间件,把用户信息挂载到req上

你只需要在中间件的then回调里,把拿到的用户信息添加到req对象上就行,比如这样:

function isAuthenticated(req, res, next) {
  const sessionCookie = req.cookies.session || "";
  admin
    .auth()
    .verifySessionCookie(sessionCookie, true /** checkRevoked */)
    .then((user) => {
      // 把用户对象挂载到req上,后续就能访问了
      req.user = user;
      // 或者单独挂载ID:req.userId = user.id;
      return next();
    })
    .catch((error) => {
      console.log(error);
      res.redirect('/login');
    });
};

步骤2:在路由处理函数中访问用户ID

现在你的路由处理函数就能直接通过req.user.id(或者你挂载的req.userId)拿到用户ID了:

app.get('/safe', isAuthenticated, function (req, res) {
  // 这里就能拿到用户ID啦
  const userId = req.user.id;
  console.log('当前登录用户ID:', userId);
  // 你的业务逻辑...
  res.redirect('safe');
});

为什么这样可行?

Express在处理请求时,会把同一个req对象传递给所有的中间件和最终的路由处理函数,所以你在中间件里给req添加的属性,后面的函数都能直接读取到。这是Express中间件传递数据最常用的方式哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:12:43