Я новичок в nodejs, я пытаюсь разработать веб-сайт с двумя пользователями, обычным пользователем и фрилансером. Когда пользователь входит в систему, res.locals.currentUser
устанавливается как req.user
с помощью промежуточного программного обеспечения 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 }
}));
Мой 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 показывает правильного пользователя, но когда фрилансер входит в систему, req.user здесь внутри app.use не определено.
Конфигурация моего паспорта для пользователя
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());
Логин пользователя, который работает нормально,
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 показывает правильную информацию внутри этого маршрута, но когда я пытаюсь получить доступ к currentUser в других представлениях ejs, currentUser не определен только для фрилансера Текущий пользователь внутри app.use также показывает undefined (только для фрилансера).
Я застрял в этом в течение долгого времени, и любая помощь была бы мне палочкой-выручалочкой.
Заранее спасибо :-)
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(); });
Есть ли какое-нибудь решение, почему его не добавляют? - person Sasuke Uchiha   schedule 26.01.2018