node.js - req.user 未在 Express Passport Node js 中的 app.use 上设置为 res.locals

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

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

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

我的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();
});

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

我的用户 Passport 配置是

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

我的管理员 Passport 配置是

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

工作正常的用户登录是

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

问题在于另一种类型的用户,即自由职业者。 我的自由职业者登录路线是

app.post("/freelancer-login", passport.authenticate("freelancer", {
failureRedirect: "/freelancer-login"
}) ,function(req, res){
res.locals.currentUser = req.user;
res.locals.session = req.session;
console.log("currentUser ------>");
console.log(res.locals.currentUser);
res.redirect("f-profile/"+req.user._id);
});

在我的console.log(res.locals.currentUser);我获得了用户的正确信息,并且 req.user 在该路由中显示了正确的信息,但是当我尝试在其他 ejs View 中访问 c​​urrentUser 时,currentUser 仅为自由职业者未定义 app.use 中的当前用户也显示未定义(仅适用于自由职业者)。

我已经被困在这个问题上很长时间了,任何形式的帮助都将是我的救星

提前致谢:-)

最佳答案

Raj,这可能是您的代码订购问题。

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

必须位于您的代码之上。试试吧!

关于node.js - req.user 未在 Express Passport Node js 中的 app.use 上设置为 res.locals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455263/

相关文章:

node.js - Docker利用了几个基础镜像

node.js - Nodejs 在子进程中的输出中断

node.js - 我可以将参数传递给 Mongoose 中的 findbyid() 函数吗

node.js - 在 ExpressJS 中使用带有 FontAwesome 的 Twitter Bootstrap

express - 为什么 express-ejs-layout 无法呈现 layout.ejs?

node.js - 如何为 Express 应用程序设置不同的 View 引擎?

javascript - 为什么在 Passport.deserializeUser 函数中再次检查用户

node.js - 如何从 Passport.js 闪现消息?

javascript - 无法使用具有 X509 用户的 Mongoose 连接到 Mongo DB

javascript - 用于多用户模型的环回 Passport -facebook