Html 从单击的电子邮件接收令牌

Html 从单击的电子邮件接收令牌,html,mysql,node.js,express,nodemailer,Html,Mysql,Node.js,Express,Nodemailer,我正在和一些团队成员一起开发一个web应用程序,我的任务是密码恢复。我们使用mysql和node.js作为后端和API层。使用以下npm包:nodemailer、mysql、express、body解析器和bcrypt 目前的问题是,我实际上不知道如何使用bcrypt令牌创建链接,然后接收令牌并解释它,然后将其与用户数据一起发送到html页面/表单 到目前为止,我还没有测试代码,但是一些输入会很好: var urlencodedParser=bodyParser.urlencoded({ 扩展:

我正在和一些团队成员一起开发一个web应用程序,我的任务是密码恢复。我们使用mysql和node.js作为后端和API层。使用以下npm包:nodemailer、mysql、express、body解析器和bcrypt

目前的问题是,我实际上不知道如何使用bcrypt令牌创建链接,然后接收令牌并解释它,然后将其与用户数据一起发送到html页面/表单

到目前为止,我还没有测试代码,但是一些输入会很好:

var urlencodedParser=bodyParser.urlencoded({
扩展:正确
});
app.use(bodyParser.urlencoded({
扩展:正确
}));
var transporter=nodeEmailer.createTransport({
服务:“gmail”,
认证:{
用户:'youremail@gmail.com',
密码:“你的密码”
}
});
var db=mysql.createConnection({
主机:“localhost”,
用户:'根',
密码:“password”,
//将DB名称更改为您创建的名称。
数据库:“projectracetrack”
});
//用户点击电子邮件中的链接。
app.get('/recover/:token',函数(req,res){
//这里
});
app.post('/forget',urlencodedParser,函数(req,res){
让sql=“从电子邮件=?限制1”的用户中选择*;
数据库连接(功能(错误){
如果(错误)抛出错误;
sql[req.body.email.toString()],函数(err,result){
如果(错误)抛出错误;
控制台日志(结果);
//比较电子邮件和数据库
if(result.email.toLowerCase()!==req.email.toLowerCase()){
//发送回复电子邮件
return res.send(“数据库中不存在您的电子邮件,请使用注册页面”);
}否则{
var代币;
//包裹令牌
bcrypt.hash(result.username、salthards、函数(err、hash){
如果(错误)抛出错误;
令牌=散列;
sql=“插入赛车(RecoveryToken,RecoverTimeOut),其中email=“+result.email+”值?限制1”;
//在此处将令牌和数据插入数据库!!
//1小时
风险值数据=[
[令牌,
Date.now()+3600000//1小时
]
];
db.query(sql,[data],函数(err){
如果(错误)抛出错误;
});
var mailpoptions={
发件人:'youremail@gmail.com',
致:result.email,
主题:“赛马场密码恢复项目”,
文本:“亲爱的”+result.username+”\n\n\
这是一个您想要恢复密码的会议,请点击链接:'+
'http://'+req.headers.host+'/recover/'+token+'\n\n\
如果您没有要求,请与我们的客户支持部门联系\n\n\
亲切的问候\n\
团队的
};
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
console.log(错误);
}否则{
console.log('发送的电子邮件:'+信息响应);
}
});
});
}
});
});
});

您想让我们关注调试您的代码吗?对不起,不,主要是当用户在电子邮件附件中单击链接时解释链接。i、 e.
app.get('/recover/:token',函数
您可以在
app.get中的
req.params.token
中获取令牌(“/recover/:token”
然后从您插入的表中进行验证谢谢我的一位高级学徒解释了令牌和get请求现在我可以将其与数据库和时间戳进行比较:
app.get(“/recover”,function(req,res){console.log(req.param('token');const utoken=req.param('token');})
链接现在是这样创建的:
'http://'+req.headers.host+'/recover/?token='+token+'