[英]Unable to access req.user in Passport.js on Express.js
除了原始功能外, req.user
在任何地方都無法訪問。
我讀到護照經過身份驗證后會將用戶附加到每個請求上。
我想阻止任何用戶通過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');
});
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.