/ / Неможливо отримати доступ до 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 у всіх посередниках.

посилання для 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) для автентифікації всієї програми