第一步对应的代码:
```
router.post('/retrivepw', function(req, res) {
switch (req.body.step) {
//第一步,生成代码并发送邮件
case 1:
req.session.retrivecode = randomString(15);
req.session.email = req.body.email; //// Session 中记下被重置的 EMAIL
req.session.cookie.expires = new Date(Date.now() + 600000);
```
第二步:
```
router.post('/resetemail', function(req, res) {
switch (req.body.step) {
case 1:
db.users.findOne({
_id: req.session.userid
}, function(err, user) {
req.session.retrivecode = randomString(15); // 重新生成 CODE, 覆盖原来的, 该 CODE 会被发到自己的邮箱里
```
第三步:
```
case 3:
if (req.body.secret != req.session.retrivecode) { /// 提交收到的 CODE, 以便让 if 不成立走后面的代码
return res.send('bad')
}
db.users.findOne({
email: req.session.email ////// 取出之前 Session 中写入的 EMAIL
}, function(err, doc) {
doc.salt = randomString(15);
doc.pass = md5(req.body.password + doc.salt); // 更新密码, 完成重置.
doc.save(function(err) {
req.session.destroy() //当成功保存,销毁 session,不可能无限进入第三步,所以同样的信息,密码只能重置一回
res.send('ok')
})
})
```