【发布时间】:2017-12-04 00:12:43
【问题描述】:
我做了这个代码,它帮助我验证我的注册电子邮件。首先,我在注册时针对每个用户在我的数据库中设置一个秘密令牌。然后我将该秘密令牌发送到带有消息的个人电子邮件,并将此令牌粘贴到用户验证页面进行验证。
这是我的注册 API:
router.post('/register', (req, res) => {
const secretToken = randomstring.generate();
var name = req.body.name;
var username = req.body.username;
var email = req.body.email;
var password = req.body.password;
var cpassword = req.body.cpassword;
req.checkBody('name','Name is required').notEmpty();
req.checkBody('email','Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('username','username is required').notEmpty();
req.checkBody('password','password is required').notEmpty();
req.checkBody('cpassword','passwords do not match').equals(req.body.password);
var errors = req.validationErrors();
if(errors)
{
res.render('register', {
errors: errors
});
}
else
{
User.findOne({email: req.body.email}, function(err, existingUser)
{
if(existingUser)
{
req.flash('error_msg', 'Email address already exits try different one!!');
res.redirect('/users/register');
console.log("In db save body");
}
else
{
var newUser = new User(
{
name:name,
email:email,
username:username,
password:password,
secretToken:secretToken,
active: false
});
User.createUser(newUser, (err,user) => {
if(err) throw err;
console.log(user);
});
//Composing email
const html = `Hi there
<br/>
Thank you for registering!
<br/><br/>
Please verify your email by typing following token:
<br/>
Token : <b>${secretToken}<b>
<br/>
On the following page :
<a href="https://login-app-passport.herokuapp.com/users/verify">https://login-app-passport.herokuapp.com/users/verify</a>
<br/><br/>
Have a good day!`;
mailer.sendEmail('admin@teamfly.com',email,'Please verify your email',html);
req.flash('success_msg','Please check your email');
res.redirect('/users/login');
}
});
}
});
当我将我的秘密令牌放入我的数据库作为 secretToken 更新为 null 和活动状态 false 为 true。
这是我的验证 API:
router.route('/verify')
.get( (req, res) => {
res.render('verify');
})
.post( (req, res, next) => {
const {secretToken} = req.body;
const user = User.findOne({'secretToken' : secretToken.trim()}).then((user) => {
if(!user)
{
req.flash('error_msg', 'No user found');
res.redirect('/users/verify');
return;
}
user.active = true;
user.secretToken = '';
user.save();
req.flash('success_msg','Thank you.You can now login');
res.redirect('/users/login');
});
});
我的问题是我想发送一个包含秘密令牌的链接,当我单击该链接时,我希望我的数据库自动更新(secretToken 为 null,活动状态为 true)并将我重定向到登录路径。我不想从电子邮件中复制秘密令牌并将其粘贴到验证页面。
【问题讨论】:
标签: javascript node.js