从用户电子邮件创建哈希/令牌以进行电子邮件验证
Creating hash/token from user email for email-verification
谁能帮我回答如何使用什么从用户输入(电子邮件地址)创建安全令牌(或哈希)。我想制作一个用于注册的电子邮件验证系统。
- 用户使用电子邮件地址和密码注册
- 我想创建一个唯一的URL,我将发送给用户(因此问题)
- 我将这些(安全明智)存储在临时表中
- 用户通过发送的 URL 验证自己
我的问题是这个URL应该是什么样子。我认为我应该通过将电子邮件地址编码到其中,将 url 保存到临时表中来使其唯一,当用户打开链接时,我会比较两者。如果匹配,我会将凭据移动到实际表。
你有关于这个主题的好资源吗?我在后端有nodejs。谢谢
我认为你的方法也是正确的。我已经在Express(REST API)中使用类似的方法进行了电子邮件验证。我使用JSON web令牌(jwt-simple包)对email_id,user_id和expiry_date进行编码(用于检查用户注册电子邮件地址上发送的链接的有效性)。
然后将此编码数据附加到链接示例:http://your_backend_server_link/verifyEmail/1234567890afshgdf..
router.post('/AddUser', function(req, res, next) {
var user = new User();
user.name = req.body.name;
user.email = req.body.email;
user.is_verified = false;
user.save(function(err,user){
if(err){
console.log(err);
res.json(err);
} else{
console.log("User data saved");
var transport = mailer.createTransport({
service : "Gmail",
auth : {
user : config.central_email,
pass : config.central_email_password
}
});
// tommorow's date
var info = {};
info.user = user;
info.expiry = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
var token = jwt.encode(info,config.secret);
console.log("http://localhost:3000/verifyEmail/" + token);
var mailOptions = {
from : "TEST<noreply@vysly.com>",
to : user.email,
subject : "Welcome to TEST",
text : 'Visit this http://localhost:3000/verifyEmail/'+token,
html : '<a href="http://localhost:3000/verifyEmail/'+token+'"><H2>Click on this</H2></a>'
}
transport.sendMail(mailOptions,function(email_err,email_data){
if(email_err){
console.log(email_err);
res.json(email_err);
}else{
console.log("Email is Sent");
res.json({result : 1});
}
});
}
});
});
当用户单击此链接时,从 URL 获取令牌并对其进行解码。通过将链接的有效性与服务器的当前日期进行比较来检查expiry_date
router.get('/verifyEmail/:token',function(req,res){
var token = req.params.token;
var data = jwt.decode(token,config.secret);
console.log(new Date(data.expiry));
console.log(new Date());
if(new Date(data.expiry) > new Date()){
User.findOne({ _id : data.user._id, name : data.user.name })
.exec(function(err,user){
if(err){
console.log(err);
res.json(err);
}else if(!user){
console.log("User not found");
res.json({error : "User not found"});
}else{
console.log("User found");
user.is_verified = true;
user.save(function(update_err,update_data){
if(update_err){
console.log(update_err);
res.json(update_err);
}else{
console.log("Email is verified of user "+update_data._id);
res.json({result : 1});
}
});
}
});
}else{
console.log("Link is expired");
res.json({error : "Link is expired"});
}
});
相关文章:
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 使用angularjs验证文本框中的电子邮件
- 使用正则表达式评估电子邮件地址时出现性能问题
- 使用Javascript获取Twitter访问令牌
- javascript中添加验证电子邮件的问题
- 如何在收到电子邮件时自动调用脚本
- FB.login访问令牌facebook javascript SDK
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 获取屏幕截图并在电子邮件中发送的按钮
- 将项目履行与高级模板合并,并通过电子邮件发送至Netsuite 2.0
- Phonegap:获取访问令牌时出现LinkedIn登录错误
- 将HTML(支持文件)中的令牌(字符串、数字等)传递给LogiXML
- 在passport.js中使用令牌验证电子邮件
- 意外的令牌导入 - 电子/反应
- 从用户电子邮件创建哈希/令牌以进行电子邮件验证
- 如何使用电子令牌在客户端加密数据
- 节点/快递邮件+令牌认证
- Javascript令牌,类别搜索字段,如邮件
- 如何发送邮件与附件使用GMAIL API没有访问令牌或重定向
- 电子ES6代码意外的令牌导入