Не можете позвонить по ссылке подтверждения электронной почты из браузера? - PullRequest
0 голосов
/ 06 июня 2019

Проблема:

Я создал функцию проверки электронной почты, когда пользователь зарегистрирован.Я отправляю ссылку на URL метода бэкенда с таким хеш-кодом, как этот.

let link = `http://localhost:3000/api/user/verify?id=${
     user[0].hash
}`;
let info = await smtpTrans.sendMail({
    from: '"Welcom" <mysite.lk99@gmail.com>',
    to: req.body.email,
    subject: "Please confirm your Email account",
    html: "Hi!,<br> Please Click on the link to verify your email.<br><a href=" +link +">Click here to verify</a>.<br> Thank you for registering with mysite.lk!.<br> mysite.lk Team"

Это мой конкретный метод проверки, на который я указываю свою ссылку.

router.post("/verify/:id", (req, res) => {
  res.redirect("https://www.facebook.com/");
});

Для целей тестирования я простоперенаправить на facebook.

Письмо успешно отправляется, но когда я нажимаю на ссылку в письме.Там написано:

Не удается получить / api / user / verify

Может кто-нибудь помочь мне решить эту проблему?Я много пытался найти решение этой проблемы, но я не смог этого сделать.Спасибо.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Проблема в методе http запроса и в вашем пути маршрута.Что я имею в виду?

  1. Когда вы, например, нажимаете эту ссылку http://localhost:3000/api/user/verify?id=a-users-hash, вы отправляете запрос GET на Node Server.Таким образом, вы должны определить GET метод для обработки запроса.
  2. В этой ссылке id - это query marameter.Если вы хотите получить доступ к значению идентификатора, вы должны использовать req.query объект вместо req.params.

Дело в том, что путь, по которому вы обрабатываете этот запрос, должен быть /api/user/verify или /verify в зависимости от промежуточного программного обеспечения, которое вы определили.

/verify/:id будет НЕ перехватить ваш запрос, потому что, как я уже говорил, id является параметром запроса.

Таким образом, ваш метод должен быть таким:

router.get("/verify", (req, res) => {
  // req.query.id is your id hash.
  res.redirect("https://www.facebook.com/");
});


Если вы хотите использовать этот подход router.get("/verify/:id", (req, res), ваша ссылка должна иметь эту форму http://localhost:3000/api/user/verify/hashId.

0 голосов
/ 06 июня 2019

Вы должны использовать GET вместо POST в

router.get("/verify/:id", (req, res) => {
  res.redirect("https://www.facebook.com/");
});

Когда пользователь нажимает на вашу ссылку внутри электронного письма (или всякий раз, когда вы вводите любой URL-адрес в адресной строке браузера), браузер спрашиваетоткрыть указанную ссылку.Действие браузера по умолчанию - запросить ссылку, используя метод GET, а не POST.

POST применяется только тогда, когда вы можете определить, как должен инициироваться HTTP-запрос, который в контексте браузера использует либо javascript после загрузки страницы, либо отправляет форму и явно указывает POST в качестве метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...