繁体   English   中英

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

[英]Password Reset Auth using MERN Stack

我在 nodemailer email 中实现了一个授权令牌,每当用户重置密码时就会发送该令牌。 我得到了生成的 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);
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM