使用 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);
})
我在 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);
})