2014-02-23 34 views
2

Hy并且在此先感谢,所以我在一个项目中工作,其中的一部分要求是要有一个用户可以插入的字段是电子邮件,然后在他的电子邮件上收到一个自定义URL帐户,从那里他可以访问该网站。这就像一个“密码重置”的例子,其中一个自定义url被生成并通过时间戳验证发送给你。我对nodejs非常新,我的问题在于如果任何人有某种类型的指导开始这样做。我的想法是生成一个会话ID,然后生成一个自定义URL,发送电子邮件,然后用户转到网页。即时通讯使用快递,整个网站已经组装,它只是这个功能,这是杀了我! :(NodeJS Sessions

+1

使用散列函数为电子邮件生成唯一的散列值,然后将其附加到URL中。您还应该将时间戳添加到散列计算。 –

+0

非常有帮助,谢谢。但我需要更多的东西,比如记录用户在网站上的操作,他访问过哪些页面,以及他提交了哪些操作,为此我需要会话,将用户历史记录保存在Cookie中,或者我认为这一切这里错了吗?感谢您的回答,我真的喜欢它 –

+1

@pakkolol一个简单的验证码和哈希与一些时间限制重置密码(如上所述),将诀窍实际上知道它的所有者重置密码,而不是一些其他人,尽管这种方式可能无法正常工作,如果用户的电子邮件受到威胁。发送包含密码重置更新的电子邮件,以防万一。另外请看看双因素身份验证,即将PIN发送到电子邮件或在有限时间内有效的手机。 – Gntem

回答

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小时或数天内),然后让它们访问重置其密码的路由。

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

0

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

下面是步骤 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* 

    } 
  • 显示复位密码页

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

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