NodeJS会话

时间:2014-02-23 09:52:54

标签: javascript node.js cookies

Hy,并提前感谢,所以我正在开发一个项目,其中部分要求是有一个用户可以插入的字段是电子邮件,然后在他的电子邮件帐户上接收自定义URL,从那里他可以访问该网站。这就像“密码重置”的示例,其中生成自定义URL并通过时间戳验证发送给您。我是nodejs的新手,我的问题是,如果有人有某种类型的guidlines开始这样做。我的想法是生成一个sessionID,然后生成一个自定义网址,发送电子邮件,然后用户进入网页。我使用快递,整个网站已经组装,它只是这个功能tha杀了我! :(

2 个答案:

答案 0 :(得分:1)

我不确定你需要什么,但这是我的建议(之前在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()

话虽如此,您通常不应该以这种方式登录用户。通常,您会在会话中设置用户并以此方式验证它。 Here's a good article on setting up sessions in 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()

密码重置需要所谓的随机数。这将是数据库中具有创建日期的小对象。您通过电子邮件向他们发送了指向使用该随机数的网站的链接。

每当使用密码重置现时命中的路由时,您在数据库中查找它,验证它是否足够新(在X小时或数天内),然后让他们访问重置其密码的路由。

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

答案 1 :(得分:0)

据我了解,您希望如何使用expressjs实现密码重置功能。<​​/ p>

这是步骤   1。 忘了密码    创建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
     }