当前位置: 首页 > 后端技术 > Node.js

Node.js邮箱注册、激活、登录相关案例

时间:2023-04-03 21:24:09 Node.js

email-verify具体详细代码github目前的登录系统,除了第三方登录接入外,主要包括短信登录和邮箱登录。根据目前实名制的特点,目前短信登录的方式很多,但还是有一些是使用邮箱登录的。本文主要讲的是邮箱登录的相关案例。通俗地说,就是用户用邮箱注册。注册成功后,将向注册用户发送一封激活邮件。当然,这封邮件有一定的时效性。激活后,用户可以正常使用相关功能。如果没有激活,登录的时候会提示没有激活,需要发邮件激活吗?1.使用工具节点v8.5.0mongodbioredispostman2.关键文件的含义在项目结构图中解释3.用户注册界面用户注册时,首先检查是否传入了必要的字段,邮箱密码是否符合specifications,然后查看邮箱是否已经注册,注册成功后会发邮件给用户激活账号。发送的邮件内容是一个链接,包括用户的邮箱地址和代码。代码使用reids设置过期时间。(未激活时用户状态为0,激活状态为1)routes中注册的路由如下://user_registrouter.post('/user_regist',userCtrl.user_regist);控制器中注册的部分代码如下:try{constuser=awaitfindUserAsyc({'useremail':user_email});//验证用户是否注册if(user){respondData.status=10002;respondData.error="邮箱已注册";返回res.json(respondData);}//用户参数constuserpassword=md5(user_password);constuserInfo={useremail:user_email,username:user_name,userpwd:userpassword,status:0,create_time:Date.now('YYYY-MM-DD')};//新建用户console.log("newGuess.saveuserInfo-->"+JSON.stringify(userInfo));constnewUser=newUserModel(userInfo);newUser.save(function(err,data){if(err){console.log("newGuess.saveerr-->"+JSON.stringify(err));respondData.status="00001";respondData.error="mongodb系统错误";返回res.json(respondData);}console.log("newGuess.savedata-->"+JSON.stringify(data));让userEmail=data.useremail;让sendEmail=sendUserEmail(userEmail);console.log("发送邮件:"+sendEmail);respondData.msg="新用户注册成功,激活邮件发送成功";返回res.json(respondData);});}catch(error){//错误处理console.log("controllers/UserController.js/user_registerror-->"+JSON.stringify(error));respondData.error=错误;返回res.json(respondData);}邮件发送部分代码varconfig_email={host:'smtp.163.com',post:25,//SMTP端口//secureConnection:true,//使用SSLauth:{user:'wangweifengyx@163.com',//这里的密码不是qq密码是你设置的smtp密码pass:'wwf'}};var传输器=nodemailer.createTranspoRT(配置电子邮件);varhtml="

http://127.0.0.1:3000?code="+code+"&account="+cnd+"
";控制台日志(html);vardata={from:'wangweifengyx@163.com',//发送地址到:cnd,//收件人列表subject:'你好冯',//title//text:html//title//textandhtmlBoth只支持一种类型的html:html//htmlcontent};控制台日志(数据);transporter.sendMail(data,function(err,info){if(err){return(err);}console.log(info.response);return(info.response);});使用postman模拟注册。此时的截图只是截取了发送到邮箱的消息。当完美用户未激活时,该用户在数据库中的状态为=0;如图:数据库用户信息4.用户邮箱激活点击邮箱中的链接激活邮箱。当邮箱与code不匹配时,会返回邮箱不匹配的信息。当代码过期时,它会返回代码过期消息。当用户激活后,会提示已经激活,不要再次激活,当用户信息没有以上情况时,会提示激活成功routes中的激活路由如下://user_activationrouter.get('/user_activation',userCtrl.user_activation);控制器中注册的部分代码如下:try{letcodeVal=awaitJtoken(code);如果(!codeVal){响应数据。error="验证码无效,请重新发送邮件激活";返回res.json(respondData);}让userinfo=JSON.parse(codeVal);if(userinfo.userEmail!==user_email){respondData.error="电子邮件不正确";返回res.json(respondData);}constuser=awaitfindUserAsyc({'useremail':user_email});//验证用户是否注册if(user){if(user.status===0){UserModel.update({'useremail':user_email},{'$set':{status:1}},function(err,results){if(err){console.log("UserModel.updateerr-->"+JSON.stringify(err));respondData.status="00001";respondData.error="mongodb系统错误";返回res.json(respondData);}respondData.msg="邮箱激活成功";返回res.json(respondData);})}elseif(user.status===1){respondData.msg="此邮箱已激活激活,请勿重复激活";返回res.json(respondData);}}}catch(error){//错误处理console.log("controllers/UserController.js/user_registerror-->"+JSON.stringify(error));respondData.error=错误;返回res.json(respondData);}使用postman模拟激活成功使用postman模拟激活码失效激活成功时数据库中的用户信息5.用户登录界面当用户未激活时,登录会告诉你未激活,需要停用。激活后,信息正常就可以登录成功了。登录成功后,会返回用户的一些信息,并添加一个tokenroutes中的登录路由如下://user_loginrouter.post('/user_login',userCtrl.user_login);控制器中登录部分代码如下:try{constuser=awaitfindUserAsyc({'useremail':user_email});//验证用户是否注册if(!user){respondData.status=10000;respondData.error="邮箱未注册";返回res.json(respondData);}constuserverify=awaitfindUserVerify(user_email,user_password);//验证用户if(!userverify){respondData.status=10005;respondData.error="邮箱或密码错误";返回res.json(respondData);}console.log(userverify);如果(userverify.status===0){respondData.status=10006;respondData.error="邮箱未激活,请激活邮箱";返回res.json(respondData);}elseif(userverify.status===1){consttokenexpiraton=1800;consttoken=require('crypto').randomBytes(16).toString('hex');consttokenContent={useremail:userverify.useremail,用户名:userverify.username};redis.set(token,JSON.stringify(tokenContent));redis.expire(token,tokenexpiraton);constuserBackInfo={};userBackInfo.token=令牌;用户返回信息。useremail=userverify.useremail;userBackInfo.username=userverify.username;userBackInfo._id=userverify._id;respondData.data.push(userBackInfo);respondData.msg="登录成功";返回res.json(respondData);}}catch(error){//错误处理console.log("controllers/UserController.js/user_registerror-->"+JSON.stringify(error));respondData.error=错误;返回res.json(respondDaata);}6.后续目前只有注册、激活、登录接口,更多功能后续可以实现。同时还没有测试,其实也可以加测试