NodeJS会话

嗨,并提前感谢,所以即时在一个项目,其中的一部分的要求是,有一个领域,用户可以插入电子邮件,然后收到一个自定义的URL在他的电子邮件帐户,从那里他可以访问该网站。 这就像是一个“密码重置”的例子,在这个例子中,一个自定义的url被生成,并通过时间戳validation发送给你。 林非常新的nodejs,我的问题是,如果任何人有某种types的指导开始这样做。 我的想法是生成一个会话ID,然后生成一个自定义的url,发送电子邮件,然后用户转到网页。 即时通讯使用快递,整个网站已经组装,其正是这个function正在杀死我! 🙁

我不确定你需要什么,但是这是我的build议(早些时候在Reddit上谈到这个)。

// If you want the user to **have** to be a custom URL req.param('userId', function(req, res, next) { db.getUser(userId, function(e, usr) { if (e) throw new Error(e); req.user = usr; }); }); req.all("*", function(req, res, next) { if (!req.user) return res.redirect('/login'); }); // Rest of routes req.get() req.post() 

这就是说,你通常不应该有这样的用户login。 通常你会在会话中设置用户并以这种方式进行validation。 这里有一篇关于在Express中设置会话的好文章。

如果你这样做,你会做这样的事情:

 req.all("*", function(req, res, next) { var userId = req.session('userid'); if (!userId) res.redirect('/login'); db.getUser(userId, function(e, usr) { if (e) throw new Error(e); if (!usr) return res.redirect('/login'); // Now the user is accessbile through its session req.session.user = usr; }); }); // Rest of routes req.get() req.post() 

密码重置需要所谓的随机数。 这将是您的数据库中有一个创builddate的小对象。 您通过电子邮件发送到您的网站的链接,使用该现时。

每当使用密码重置随机数的命中path,您在数据库中查找它,validation它是新的(在X小时或数天内),然后让他们访问重置密码的路线。

你的项目需求非常模糊,所以我不确定你需要什么。

至于我的理解,你想要如何使用expressjs来实现密码重置function。

这里是步骤1.忘记密码创build一个API

  app.post('/forgotpassword',function(req,res){ var email = req.body.email; // validation // your custom url creation logic here // someurl/:resetpasswordtoken // store this in user data // for this I'll suggest to use any unique string creation logic* } 
  1. 显示重置密码页面

      app.get('/someurl/:resetpasswordtoken, function(req,res) { //check token exist // render the page for reset like current passwor,new password } 
  2. 重置密码的操作

      app.post('/someurl/:resetpasswordtoken , function(req,res){ var currentPwd = //get current pwd var newPwd = //get new pwd //check token //then reset password for user }