【发布时间】:2020-09-16 09:41:24
【问题描述】:
我正在开发一个 MERN 应用程序。目前我正在处理我的密码重置电子邮件、验证 ResetToken、重置和更新密码。至此,我已经能够在后端完成All了。
在前端,我已经完成了 ForgotPassword 请求,该请求向用户发送了一封带有重置令牌的邮件。
现在的问题是我无法在前端检索令牌。
在我的后端,restPassword:
userRouter.get('/reset/:token', (req, res) => {
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt : Date.now() },
}).then((user) => {
if (user == null) {
console.error('password reset link is invalid or has expired');
res.status(403).json({message : {msgBody : "password reset link is invalid or has expired", msgError: true}});
} else {
res.status(200).send({
username: user.username,
resetPasswordToken: user.resetPasswordToken,
message: {msgBody : "password reset link a-ok", msgError: true},
});
}
});
});
当使用这样的有效 URL 进行测试时,我得到了正确的响应
在我的前端,我的路由器是这样设置的
function App() {
return (
<div className="App">
<Router >
<Switch>
...
<UnPrivateRoute
path="/forgotPassword"
component={ForgotPassword} />
<UnPrivateRoute
path="/reset/:token"
component={ResetPassword} />
<UnPrivateRoute
path="/login"
component={Login} />
...
</Switch>
</Router>
</div>
);
}
export default App;
我尝试在发送给用户的电子邮件中检索附加到路径 (http://localhost:3000/reset/c25d7b114e99e8720761732eb1670a3d0a084877) 的参数(令牌),以便我可以在我的获取请求中使用它,但到目前为止我还不能。
我的响应数据的控制台日志是状态 401(响应 {type: "basic", url: "http://localhost:3000/user/reset/", redirected: false, status: 401, ok: false, ...})
这是我的代码。任何有效的解决方案将不胜感激。谢谢
const ResetPassword = props => {
var url = new URL('http://localhost:3000/user/reset/?');
var token = new URLSearchParams(url.search);
useEffect(()=>{
fetch('http://localhost:3000/user/reset/'+ token).then(data =>{
console.log(data);
});
},[token]);
});
return (
<>
</>
);
}
export default ResetPassword;
【问题讨论】:
标签: reactjs parameters fetch use-effect change-password