Задать вопрос
allishappy
@allishappy

Как правильно сделать авторизацию?

Здравствуйте. Вопрос объёмный, но я постараюсь коротко всё описать.
Пишу типичную авторизацию на Express.js. Суть такова:
1) пользователь вводит в форме данные
2) если в БД есть такой юзер, то идёт редирект на другую страницу
3) если в БД нет такого юзера, то на клиенте выскакивает сообщение об ошибке (редирект не происходит)

Как я понял, чтобы реализовать 3), мне надо форму отправлять через XMLHttpRequest. Потому что когда я отсылаю данные обычным post-запросом <form method='post' action='/registration'></form>, то у меня потом не получается на клиенте на той же странице получить данные от сервера.

А чтобы реализовать 2), мне надо использовать обычные POST-запросы. Потому что при XMLHttpRequest нельзя сделать res.redirect() на сервере.

Как быть?
З.Ы. Я знаю про passport.js, спасибо. Хочу написать всё самостоятельно
  • Вопрос задан
  • 257 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@lemme
Frontend
Вот банальная аутентификация.
User - модель mongodb

Сразу скажу, пароль нужно шифровать - например (bcrypt), соотвественно выбирать не по username и password, а по username, а потом уже сравнивать зашифрованный пароль с полученным из post запроса.
Так как это пример аутентификации json, то вместо success: true, нужно слать токен, но это вам делать, примеров в гугле тонны.

Насчет хочу все сделать сам, не нужно так говорить, а потом спрашивать банальные вещи, которых - опять же, в гугле тонна.

Хипстерский async/await, без него никуда:(
app.post('/login', async (req, res, next) => {
	const { username, password } = req.body;
  
  try {
    const user = await User.find({ username, password }).exec();
    
    if (!user) {
    	return res.status(401).json({ message: 'Invalid username or password'});
    }
    return res.send({ success: true });
  } catch(e) {
  	next(e);
  }
});


На клиенте все просто:

1) Шлете ajax запрос (username, password)
2) получаете статус (401/200)
3) парсите json
4) если 401, то выводите ошибку
5) если 200, то редиректите через window.location

p.s написано прямо тут, поэтому за работоспособность не ручаюсь, но вроде - должно все работать.

В догонку, чтоб не спрашивать подобные вопросы, посмотрите скринкаст Ильи Кантора по NodeJS
learn.javascript.ru/screencast/nodejs
Ответ написан
Комментировать
@hoarywolf
Получив положительный ответ при XMLHttpRequest-запросе в третьем случае, вы можете JavaScript-ом в браузере сделать редирект.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@antonsr98
Системный Администратор
ajax post :)
Ответ написан
Комментировать
@tosha_lol_daaa
А в чем проблема то?
Посылайте на js данные(POST) и в качестве ответа от сервера:
success , делов то
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы