#javascript #node.js #express #authentication #cookies
Вопрос:
Я аутентифицирую пользователя с помощью файлов cookie, сохраненных в запросе, с помощью промежуточного программного обеспечения для аутентификации, которое я включил ниже.
const Authenticate = async (req, res, next) =gt; { try { const token = req.cookies.jwtoken; const verifyToken = jwt.verify(token, JWT_SECRET); const mainUser = await User.findOne({ _id: verifyToken._id, "tokens.token": token, }); if (!mainUser) { throw new Error("User not Found"); } req.token = token; req.mainUser = mainUser; req.email = mainUser.email; req.userID = mainUser._id; // console.log(req.mainUser._id); // console.log(req.email); next(); } catch (error) { res.send({ status: "error", error: error.message }); console.log(error); } };
Я хочу аутентифицировать пользователя, когда он нажимает на любую ссылку в навигационной панели на главной странице. Прямо сейчас это просто приведет пользователя на любую страницу, даже если они еще не подписаны/ аутентифицированы. Ссылки-это просто теги привязки в navbar.
Все мои страницы являются статическими html — страницами, обслуживаемыми nodejs. Это то, что я пытался аутентифицировать пользователя, но, похоже, это не работает
app.get("/mycourses.html", auth, (req, res) =gt; { console.log(req.email); });
Ожидаемая функциональность заключается в том, что пользователю предлагается войти в систему/выдается ошибка при нажатии на любую ссылку на домашней странице, когда пользователь не вошел в систему.
Комментарии:
1. я не думаю , что req.email или что-то другое работает нормально , обычно у req есть тело, запрос, заголовки
Ответ №1:
просто используйте промежуточное программное обеспечение аутентификации, которое у вас есть в каждом отдельном приложении.get(‘/**’) в вашем коде и внутри вашего блока if используйте res.redirect(‘/login’)
if (!mainUser) { //this line will redirect user to login page for example res.redirect('/login'); throw new Error("User not Found"); }
получайте удовольствие!!