如何将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
相关产品推荐
相关产品推荐

