节点js的 – 如何安全地传递令牌从http获取请求到html页面?

我正在实施自己的自定义密码重置,发送一个电子邮件,用户正在页面重置密码。

到目前为止,我已经生成了一个独特的令牌,放在一个http获取请求链接中,并通过电子邮件发送给用户。

当用户点击链接时(例如mywebsite.com/verifypasswordreset?id=96rZyAWLTu

我有一个明确的路线获取令牌:

 //Verify Password Reset app.get('/verifypasswordreset', function(req, res) { Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, { success: function(user) { res.sendFile(path.join(__dirname + '/website/resetpassword.html')); }, error: function(error) { res.sendFile(path.join(__dirname + '/website/404.html')); } }); }); 

然后,我运行一个Parse云代码函数validation如果令牌存在,如果是的话,它通过发送包含重置密码的表单的HTML响应。 ( resetpassword.html

此时, resetpassword.html页面的url仍然包含embedded的令牌( mywebsite.com/verifypasswordreset?id=96rZyAWLTu ),但是,一旦用户提交表单,它会执行一个http post并发布新的密码,离开令牌后面的链接,因此我不知道哪个令牌与密码重置相关联?

 //Reset Password app.post('/resetpassword', function(req, res) { res.send('You sent the password "' + req.body.password + '".'); }); 

当用户提交表单来更改密码时,如何从当前URL( mywebsite.com/verifypasswordreset?id=96rZyAWLTu )获取该令牌并将其包含在http post请求中,以便我的节点js应用程序可以读取并知道哪个令牌与密码重置相关联?

或者,他们是一个更好和更安全的方式来跟踪令牌?

*注意忽略我正在使用http我打算购买一个SSL证书,并使用https发射之前。

当您只是发送resetpassword.html页面时,我看不出validation令牌的重要性。 但是,实际更新用户密码时,必须validation令牌。 所以,这里有一个稍微修改的工作stream程:

用户点击链接(例如mywebsite.com/passwordreset?id=96rZyAWLTu)

 app.get('/passwordreset', function(req, res) { res.sendFile(path.join(__dirname + '/website/resetpassword.html')); }); 

您的resetpassword页面的URL仍然embedded了令牌。 现在,用户提交表单,它会创build一个http文章并发布新的密码。

 app.post('/passwordreset', function(req, res) { Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, { success: function(user) { //update user's password here res.send('You sent the password "' + req.body.password + '".'); }, error: function(error) { res.sendFile(path.join(__dirname + '/website/error.html')); } });