前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nodejs+express实现用户登录,注册以及退出操作

nodejs+express实现用户登录,注册以及退出操作

作者头像
十月梦想
发布2018-08-29 14:45:19
1.8K0
发布2018-08-29 14:45:19
举报
文章被收录于专栏:十月梦想

nodejs实现用户登录注册退出状态

先从用户注册说起吧,毕竟注册才能去数据库增加数据,然后在增加校验,本次先从注册===>登录===>退出这个层次顺序说起!接下来看一下用户注册!

用户注册

前台页面以及ajax请求

代码语言:javascript
复制
           <form action="">
                <!--<p class="h3 pull-right">已有账号注册?马上登录!</p>-->
                <div class="form-group  col-md-8">
                    <label for="">用户名:</label>
                    <input type="text" placeholder="请输入您的用户名" id="user">
                </div>
                <div class="form-group col-md-8">
                    <label for="">密码:</label>
                    <input type="password" placeholder="这里是您的密码输入框!!!" id="pwd">
                    <br>
                    <button class="btn btn-primary btn-lg" type="button" id="login">登录</button>
                </div>

            </form>
<script>
   $('#login').click(function(){
       //ajax登录校验
       $.post("/dologin",{
           "username":$('#user').val(),
           "password":$('#pwd').val()
       },function(result){
           if(result==-1){
               alert("用户名不存在");
               $('#err').fadeIn(800);
               $('#err h3').html('用户名不在!请重试')
           }else if(result==0){
               alert("密码错误");
               $('#err').fadeIn(800);
               $('#err h3').html('密码错误!!请重新尝试登录')
           }else{
               alert("登录成功,马上进入首页!");
               window.location="/";
           }
       })
   })
</script>

nodejs处理后端

代码语言:javascript
复制
exports.doreg=function(req,res){
    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
       var username=fields.username;
       var password=fields.password;
       //加密密码
        password=md5(md5(password).substr(8,6)+224+md5(password)+md5('symx'))
        console.log(password);
       if(err){
           res.json(-1);//服务器错误-1
           return;
       }else{
           //开始查找数据
           db.find("user",{"username":username},function(err,doc){
               if(doc.length!=0){
                   //数据存在
                   console.log("用户名存在");
                   res.json(-2);
                   return;
               }else{
                   db.insertMany("user",[{"username":username,"password":password}],function(err,result){
                       if(err){
                           console.log("数据插入失败");
                           return;
                       }else{
                           //注册成功,写入session;
                           req.session.login=1;
                           req.session.username=username;
                           res.json(1);//数据插入成功;
                           console.log("数据插入成功");

                       }
                   })
               }
           })
       }
     // console.log(fields)
    });
}

说明:本次采用的加密是md5混合md5(md5(password).substr(8,6)+224+md5(password)+md5('symx')),

双重加密,因此登录校验时候遵循这个规律铭文对比加密后字符串数据库校对!接下来看一下登录校验过程!

登录校验

前台页面以及ajax提交

代码语言:javascript
复制
           <form action="">
                <!--<p class="h3 pull-right">已有账号注册?马上登录!</p>-->
                <div class="form-group  col-md-8">
                    <label for="">用户名:</label>
                    <input type="text" placeholder="请输入您的用户名" id="user">
                </div>
                <div class="form-group col-md-8">
                    <label for="">密码:</label>
                    <input type="password" placeholder="这里是您的密码输入框!!!" id="pwd">
                    <br>
                    <button class="btn btn-primary btn-lg" type="button" id="login">登录</button>
                </div>

            </form>
<script>
   $('#login').click(function(){
       //ajax登录校验
       $.post("/dologin",{
           "username":$('#user').val(),
           "password":$('#pwd').val()
       },function(result){
           if(result==-1){
               alert("用户名不存在");
               $('#err').fadeIn(800);
               $('#err h3').html('用户名不在!请重试')
           }else if(result==0){
               alert("密码错误");
               $('#err').fadeIn(800);
               $('#err h3').html('密码错误!!请重新尝试登录')
           }else{
               alert("登录成功,马上进入首页!");
               window.location="/";
           }
       })
   })
</script>

nodejs校对负责校对数据库(与注册类似又相反操作)

代码语言:javascript
复制
exports.dologin=function(req,res){
    var form=new formidable.IncomingForm();
    form.parse(req,function(err,fields,files){
        var username=fields.username;
        var password=fields.password;
        //加密密码
        password=md5(md5(password).substr(8,6)+224+md5(password)+md5('symx'))
        console.log(username+"----密码:"+password);
        //查找数据
        db.find("user",{"username":username},function(err,doc){
            if(doc.length==0){
                res.json(-1);//用户名不存在
                return;
            }else{
                //用户名存在分为密码是否错误
                if(doc[0].password==password){
                    req.session.login="1";
                    req.session.username=username;
                    res.json(1);//登陆成功
                    return;
                }else{
                    res.json(0);//密码不匹配
                }
            }
        })
    })
}

用户登录错误的情况要进行分类,输入的用户名不存在或者密码错误等!这些校验成功后则就会登陆成功!接下来看一下如何进行用户退出操作!

用户退出

前台只需要将进行一个超链接进行get请求到退出的路由既可,这里不做前台页面,只进行后端node代码说明

代码语言:javascript
复制
exports.doLogout=function(req,res,next){
        req.session.destroy(function(err){
            if(err){
                console.log("退出失败!");
                return;
            }
            //清除登录cookie
            res.clearCookie(user_key)
            res.redirect("/")
        })
}

说明: res.clearCookie(user_key)  这个user_key就是被清除状态的session,这个变量首先要声明一下,然后在session中间件中声明这个name,这个类似去标记这个session

代码语言:javascript
复制
app.use(session({
    name:user_key,
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
}))

用户才登陆,注册,退出状态简单实现!如有问题下面留言,如有错误请帮忙指出谢谢!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-8-7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nodejs实现用户登录注册退出状态
    • 用户注册
      • 登录校验
        • 用户退出
        相关产品与服务
        消息队列 TDMQ
        消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档