繁体   English   中英

无法在Express.js上的Passport.js中访问req.user

[英]Unable to access req.user in Passport.js on Express.js

除了原始功能外, req.user在任何地方都无法访问。

我读到护照经过身份验证后会将用户附加到每个请求上。

我想阻止任何用户通过URL栏访问内部页面,从而跳过登录页面,或者如果他的会话已经处于活动状态,则必须将其重定向到用户页面。 仅当我在所有中间件中都可以访问req.user ,才能完成这两件事。

app.js链接

app.js: -

app.post('/',passport.authenticate('local',{failureRedirect: '/'}),
function(req,res,next){
console.log(req.user); //req.user defined here only not in users.js
res.redirect('/users');
});

users.js: -

router.get('/users', function(req, res, next) {
console.log(req.user);//undefined    
res.render('users');
});

DeserializeUser: -

passport.deserializeUser(function(id, done) {
db.findById(id, function(err, user) {
done(err, user);
console.log(user) //undefined 
});
});

看来您的应用程序没有设置为支持会话,这通常是Passport“记住”用户已登录并填充req.user

Express最常用的会话中间件是express-session ,它相对容易设置。

为了快速检查问题是否存在,可以将以下内容添加到您的应用中:

app.use(session({ secret: 'super secret' }));

确保 app.use(passport.session()) 之前添加它。

如果可行,您应该阅读如何配置会话存储以及会话中间件的各种其他选项。

创建一个带有以下内容的中间件功能: passport.authenticate('local',{failureRedirect: '/'})作为内容,并在您要验证的每条路径中使用它。 或者在app.use(that_function)使用它来验证整个应用程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM