Как получить значение из URL с помощью Node.js и Express? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь получить значение токена по следующему URL http://localhost:3000/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8.У меня есть запрос на получение, который проверяет, является ли токен действительным, и перенаправляет пользователя на экран сброса пароля.У меня также есть почтовый запрос, но когда я утешаю req.params.token, он выводит :token вместо e3b40d3e3550b35bc916a361d8487aefa30147c8.Мне интересно, правильно ли выполнено действие формы, но я не знаю, как из него получить значение токена.

Сбросить пароль Получить запрос

router.get('/reset/:token', (req, res) => {
  console.log(req.params.token) // e3b40d3e3550b35bc916a361d8487aefa30147c8
  User.findOne({
    resetPasswordToken: req.params.token,
    resetPasswordExpires: {
      $gt: Date.now() 
    }
  }, (err, user) => {
    if (!user) {
      req.flash('error_msg', 'The password reset token is invalid or has expired.')
      return res.redirect('/users/forgot')
    }
    res.render('reset')
  })
})

reset.ejs

<% include ./partials/messages %>
<form action="/users/reset/:token" method="POST">
    <div class="form-group">
    <label for="password">Password</label>
    <input type="password" id="password" name="password" class="form-control" placeholder="Please enter a password."
        value="<%= typeof password != 'undefined' ? password : '' %>" />
    </div>
    <button type="submit" class="btn btn-primary btn-block">Register</button>
</form>

Сбросить пароль Отправить запрос

router.post('/reset/:token', (req, res) => {
  console.log(req.params.token) // :token
  User.findOne({
    resetPasswordToken: req.params.token,
    resetPasswordExpires: {
      $gt: Date.now() 
    }
  }, (err, user) => {
    if (!user) {
      req.flash('error_msg', 'The password reset token is invalid or has expired.')
      return res.redirect('/users/forgot')
    }

    user.password = req.body.password;
    user.resetPasswordToken = undefined;
    user.resetPasswordExpires = undefined;

    user.save(function (err) {
      req.flash('success_msg', 'Working.')
      return res.redirect('/users/login')
    })
  })
})

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Чтобы получить значение параметра URL

app.get('/reset/:token', function(req, res) {
    res.send("token is " + req.params.token);
});

Чтобы получить параметр запроса? Token = Adhgd5645

app.get('/reset/?token=Adhgd5645', function(req, res) {
    res.send("token is " + req.query.token);
});
0 голосов
/ 03 февраля 2019

В вашей форме в вашем HTML у вас есть это:

<form action="/users/reset/:token" method="POST">

Фактический URL, который будет запрошен при публикации формы, будет:

/users/reset/:token

Естьздесь нет кода, заменяющего :token.Это просто отправляется непосредственно на сервер в виде URL.

Итак, когда у вас есть:

router.post('/reset/:token', (req, res) => {
    console.log(req.url);            // "/user/reset/:token"
    console.log(req.params.token);   // ":token"
});

То, что req.params.token показывает вам, это то, что находится в URL после /users/reset.В вашем случае это буквальная строка ":token".Чтобы req.params.token действительно содержал токен в нем, вам необходимо вставить фактический токен в URL, чтобы тег формы выглядел следующим образом:

<form action="/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8" method="POST">

Или вам нужно будет получить доступ ктокен каким-либо другим способом, например, из экспресс-сеанса, из файла cookie, из поля в форме и т. д. ...

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