使用 MERN 堆栈的密码重置身份验证

Password Reset Auth using MERN Stack

我在 nodemailer 电子邮件中实现了一个身份验证令牌,每当用户重置密码时都会发送该令牌。我已经生成了 url 以及附加的令牌设置并正确发送,我似乎无法让我的路由正确处理所述令牌的身份验证。

我的请求返回 404,表示未找到我的 GET (GET http://localhost:3000/reset/XXXXXXXXXXXX 404 (Not Found) )。谁能帮我指明正确的方向?

这是我的 api 服务器路由

router.get('/reset', (req, res, next) => {
   User.findOne({ resetPasswordToken: req.query.resetPasswordToken }).then(user => {
      if (user == null) {
         res.json('Password link is invalid or has expired');
      } else {
         res.status(200).send({
           username: user.email,
           message: 'Password link accepted',
         })
     }
   })
});

以及我处理请求的代码

componentDidMount() {

  console.log(this.props.match.params.token);

  axios.get('/reset' + this.props.match.params.token)
    .then(response => {
      // Conditional logic here based on response returned
    })
    .catch(function (error) {
      console.log(error);
    })
}

你需要像这样告诉 express 期望 url 中的参数:

router.get('/reset/:token', (req, res, next) => {
   // token is inside req.params.token
   User.findOne({ resetPasswordToken: req.params.token }).then(user => {
      if (user == null) {
         res.json('Password link is invalid or has expired');
      } else {
         res.status(200).send({
           username: user.email,
           message: 'Password link accepted',
         })
     }
   })
});

然后确保在发出请求时 url 中有一个斜线:

  axios.get('/reset/' + this.props.match.params.token)
    .then(response => {
      // Conditional logic here based on response returned
    })
    .catch(function (error) {
      console.log(error);
    })