Hy并且在此先感谢,所以我在一个项目中工作,其中的一部分要求是要有一个用户可以插入的字段是电子邮件,然后在他的电子邮件上收到一个自定义URL帐户,从那里他可以访问该网站。这就像一个“密码重置”的例子,其中一个自定义url被生成并通过时间戳验证发送给你。我对nodejs非常新,我的问题在于如果任何人有某种类型的指导开始这样做。我的想法是生成一个会话ID,然后生成一个自定义URL,发送电子邮件,然后用户转到网页。即时通讯使用快递,整个网站已经组装,它只是这个功能,这是杀了我! :(NodeJS Sessions
2
A
回答
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 }
相关问题
- 1. Sessions&ContentPlaceHolders
- 2. Wicket Sessions
- 3. 你可以在RESTFUL环境中使用NodeJs Passport Sessions吗?
- 4. PHP SESSIONS问题
- 5. Webmatrix,Razor和Sessions
- 6. PHP:销毁SESSIONS
- 7. AngularJS/Restangular sessions
- 8. open_basedir vs sessions
- 9. Kohana Sessions Issue
- 10. Sessions破坏CodeIgnitor
- 11. Apache ProxyPass和Sessions
- 12. PHP SESSIONS问题
- 13. PHP:替代SESSIONS
- 14. 使用sessions - PHP
- 15. ruby on rails - sessions
- 16. PHP Sessions + Useragent with salt
- 17. gae-sessions for Python 2.7
- 18. PHP:导致缓慢的SESSIONS
- 19. $ $ SESSIONS中的POST数据
- 20. Java,Tomcat,Sessions - JSessionId消失
- 21. Zend Sessions问题(初学者)
- 22. Zend Sessions问题与IE8
- 23. gae-sessions不删除数据
- 24. ActiveAdmin :: Devise :: Sessions中的NoMethodError#new
- 25. Sessions Scheduling的遗传算法
- 26. Devise :: Sessions中的ActionController :: UrlGenerationError#new
- 27. Kohana和CKFINDER。麻烦SESSIONS
- 28. 东西非常错误SESSIONS
- 29. Rails3/Sessions/Active_Record_Store/Signout - >如何删除Sessions表中的cookie和记录?
- 30. ActiveAdmin :: Devise :: Sessions#中的Formtastic :: UnknownInputError#new
使用散列函数为电子邮件生成唯一的散列值,然后将其附加到URL中。您还应该将时间戳添加到散列计算。 –
非常有帮助,谢谢。但我需要更多的东西,比如记录用户在网站上的操作,他访问过哪些页面,以及他提交了哪些操作,为此我需要会话,将用户历史记录保存在Cookie中,或者我认为这一切这里错了吗?感谢您的回答,我真的喜欢它 –
@pakkolol一个简单的验证码和哈希与一些时间限制重置密码(如上所述),将诀窍实际上知道它的所有者重置密码,而不是一些其他人,尽管这种方式可能无法正常工作,如果用户的电子邮件受到威胁。发送包含密码重置更新的电子邮件,以防万一。另外请看看双因素身份验证,即将PIN发送到电子邮件或在有限时间内有效的手机。 – Gntem