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

时间:2016-06-30 17:28:27

标签: javascript node.js express passport.js

除了原始函数之外,

req.user无法访问。

我读到护照会在验证后将用户附加到每个请求。

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

app.js link

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 
});
});

2 个答案:

答案 0 :(得分:5)

看起来您的应用程序似乎不支持会话,这通常是Passport“记住”用户已登录并填充req.user所需的内容。

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

要快速检查,看看这是否是问题,您可以将以下内容添加到您的应用中:

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

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

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

答案 1 :(得分:0)

使用以下内容创建一个中间件函数:passport.authenticate('local',{failureRedirect: '/'})作为内容,并在您想要进行身份验证的每个路由中使用它。或者在app.use(that_function)中使用它来验证整个应用