答案 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*
}
显示重置密码页
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
}