我目前正在研究mean.io的锅炉板代码并实施passwordresetemail。当用户要求使用电子邮件作为参数重置密码时,我创建一个salt(resetid)并向他发送一封电子邮件,其中包含该盐作为重置链接。
我在req中有用户的电子邮件,但想要在进入实际的createemail控制器功能之前附加用户的其他信息(user._id)。我希望在进入createResetPasswordEmailLink之前运行以下函数(userbyemail)
/**
* Find user by email
*/
exports.userByEmail = function(req, res, next, email) {
User
.findOne({
email: email
})
.exec(function(err, user) {
if (err) return next(err);
if (!user) return next(new Error('Failed to load User with email ' + email));
req.user = user;
next();
});
};
exports.createResetPasswordEmailLink = function(req, res) {
var resetPassword = new ResetPassword(req.body);
resetPassword.resetId = new User().makeSalt();
**resetPassword.user = req.user._id; // currently req.user is null**
console.log(resetPassword.userId);
resetPassword.save(function(err) {
if (err) {
// handle error
}
res.status(200);
return res.redirect('/');
});
};
以下是我的resetPassword架构
var ResetPasswordSchema = new Schema({
created: {
type: Date,
default: Date.now
},
resetId: {
type: String,
default: '',
trim: true
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
我的路线定义如下
// Setting up the users resetpasswordlink
app.route('/createresetpasswordemaillink')
.post(users.createResetPasswordEmailLink);
答案 0 :(得分:0)
我可以用app.params解决这个问题。 App.params正是为这种用法而定义的。
我添加了
// Setting up the userId param
app.param('email', users.userByEmail);
到我的路线,它会在将req传递给常规控制器之前自动执行此功能。
从文档中,App.param被定义为
app.param([name],callback) 映射逻辑以路由参数。例如,当用户出现在路径路径中时,您可以映射用户加载逻辑以自动为路径提供req.user,或者对参数输入执行验证。