无法在 Express.js 访问 Passport.js 中的 req.user
Unable to access req.user in Passport.js on Express.js
req.user
除了其 origin 函数外,在任何地方都无法访问。
我读到护照在身份验证后将用户附加到每个请求。
我想阻止任何用户通过 url 栏访问内部页面从而跳过登录页面,或者如果他的会话已经处于活动状态,他必须被重定向到用户页面。这两件事只有在我可以访问所有中间件中的 req.user
时才能完成。
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');
});
反序列化用户:-
passport.deserializeUser(function(id, done) {
db.findById(id, function(err, user) {
done(err, user);
console.log(user) //undefined
});
});
创建一个中间件功能 this : passport.authenticate('local',{failureRedirect: '/'})
作为内容,并在您想要验证的每个路由中使用它。或者在 app.use(that_function)
中使用它来验证整个应用程序
您的应用似乎未设置为支持会话,这通常是 Passport "remember" 用户已登录并填充 req.user
所需要的。
最常见的 Express 会话中间件是 express-session
,而且设置起来相对容易。
为了快速检查是否是问题所在,您可以将以下内容添加到您的应用中:
app.use(session({ secret: 'super secret' }));
确保在之前添加它 app.use(passport.session())
.
如果可行,您应该阅读如何配置会话存储,以及会话中间件的各种其他选项。
req.user
除了其 origin 函数外,在任何地方都无法访问。
我读到护照在身份验证后将用户附加到每个请求。
我想阻止任何用户通过 url 栏访问内部页面从而跳过登录页面,或者如果他的会话已经处于活动状态,他必须被重定向到用户页面。这两件事只有在我可以访问所有中间件中的 req.user
时才能完成。
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');
});
反序列化用户:-
passport.deserializeUser(function(id, done) {
db.findById(id, function(err, user) {
done(err, user);
console.log(user) //undefined
});
});
创建一个中间件功能 this : passport.authenticate('local',{failureRedirect: '/'})
作为内容,并在您想要验证的每个路由中使用它。或者在 app.use(that_function)
中使用它来验证整个应用程序
您的应用似乎未设置为支持会话,这通常是 Passport "remember" 用户已登录并填充 req.user
所需要的。
最常见的 Express 会话中间件是 express-session
,而且设置起来相对容易。
为了快速检查是否是问题所在,您可以将以下内容添加到您的应用中:
app.use(session({ secret: 'super secret' }));
确保在之前添加它 app.use(passport.session())
.
如果可行,您应该阅读如何配置会话存储,以及会话中间件的各种其他选项。