簡體   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