/ / Невъзможно е да имате достъп до req.user в Passport.js на Express.js - javascript, node.js, express, passport.js

Невъзможно е да имате достъп до req.user в Passport.js на Express.js - javascript, node.js, express, passport.js

req.user достъпен навсякъде, с изключение на функцията му за произход.

Четох, че паспортът придава на потребителя всяка заявка след удостоверяване.

Искам да спра всеки потребител да има достъп до вътрешниястраници чрез URL адреса, като прескача страницата за вход или ако сесията му вече е активна, трябва да бъде пренасочена към потребителската страница. Тези две неща могат да се правят само ако получавам достъп req.user във всички middlewares.

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

Отговори:

5 за отговор № 1

Не изглежда, че приложението ви е настроено да поддържа сесии, което обикновено е необходимо, за да се "пази" паспорта, че даден потребител е влязъл, и да се попълва req.user.

Най-често срещаният среден мидълуер за Express е express-session, и относително лесно да се създаде.

За бърза проверка, за да видите дали това е проблемът, можете да добавите следното към приложението си:

app.use(session({ secret: "super secret" }));

Уверете се, че сте го добавили преди app.use(passport.session()).

Ако това се случи, трябва да прочетете как да конфигурирате магазин за сесии и какви са различните други опции на сесийния мидълуер.


0 за отговор № 2

създайте мидълуер с тази функция: passport.authenticate("local",{failureRedirect: "/"}) като съдържание и да го използвате във всеки маршрут, който искате да удостоверите. Или го използвайте app.use(that_function) за удостоверяване на цялото приложение