req.user未在快速护照节点js中的app.use上设置为res.locals

时间:2018-01-26 03:09:33

标签: node.js express passport.js ejs express-session

我是nodejs的新手,我正在尝试开发一个包含两个用户,普通用户和自由职业者的网站。当用户登录时,res.locals.currentUser通过使用中间件app.use设置为req.user(我对两种类型的用户使用相同的中间件)。

#!/bin/sh
source bin/activate
python script_with_python3_code

我的app.use代码是

app.use(session({
secret: "Rusty is the best and cutest dog in the world",
resave: false,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
cookie: { maxAge: 180 * 60 *1000 }
}));

当用户登录时,req.user显示正确的用户,但是当自由职业者登录req.user时,app.use里面的内容是未定义的。

我的用户护照配置为

app.use(passport.initialize());
app.use(passport.session());

app.use(function(req, res, next){
console.log("inside app use");
res.locals.currentUser = req.user;
res.locals.session = req.session;
console.log(req.user);
next();
});

管理员的我的护照配置是

passport.use('user', new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

用户登录工作正常

passport.use('freelancer', new LocalStrategy(Freelancer.authenticate()));
passport.serializeUser(Freelancer.serializeUser());
passport.deserializeUser(Freelancer.deserializeUser());

问题在于其他类型的用户Freelancer。 我的自由职业者登录路线是

app.post("/user-login", passport.authenticate("user", {

failureRedirect: "/user-login"
}) ,function(req, res){
console.log("success");
if(req.session.oldUrl){
    var oldUrl = req.session.oldUrl;
    req.session.oldUrl = null;
    res.redirect(oldUrl);

}else{
    console.log("inside else");
    res.redirect("/my-user-profile/"+req.user._id);
}
});

在我的console.log上(res.locals.currentUser);我得到了用户的正确信息,并且req.user显示了此路由中的正确信息,但是当我试图访问其他ejs视图中的currentUser时,currentUser仅为自由职业者定义 app.use中的当前用户也显示undefined(仅适用于自由职业者)。

我已经坚持了很长一段时间,任何一种帮助都会成为救星

提前致谢: - )

1 个答案:

答案 0 :(得分:1)

Raj,可能是有问题或正在订购代码。

The

app.use(function(req, res, next){
  res.locals.currentUser = req.user;
  });
  
  

必须在代码之上。试试吧!