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

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

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

用户注册

前台页面以及ajax请求

           <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处理后端

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提交

           <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校对负责校对数据库(与注册类似又相反操作)

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代码说明

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

app.use(session({
    name:user_key,
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
}))

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏惨绿少年

日志切割之Logrotate

1763
来自专栏Brian

Linux 基础知识

---- 简要 作为了一个服务端开发人员而言,不仅有强大的内功而且也需要对一些工具和运维方面的知识。Linux毋容置疑是每一个后端开发人员必须熟悉或者精通的“大...

4585
来自专栏小樱的经验随笔

Linux目录结构

Linux 目录结构 装完Linux,首先需要弄清Linux 标准目录结构 ? / root —?启动Linux时使用的一些核心文件。如操作系统内核、引导程序G...

4286
来自专栏大学生计算机视觉学习DeepLearning

mysql安装 2017最新安装mysql教程及遇到的问题解决Windows下

3726
来自专栏JetpropelledSnake

Python Web学习笔记之Cookie,Session,Token区别

2597
来自专栏Samego开发资源

集群反向代理实现负载均衡『nginx & apache2』

1933
来自专栏机器学习实践二三事

Git使用

上篇博客说到了Git是什么以及搭建基本的Git环境,这篇就说说其基本使用 提交 上一篇写到了,你有个README.txt需要提交 $ git add READM...

2057
来自专栏腾讯云Elasticsearch Service

Elasticsearch跨集群数据迁移之离线迁移

用户在腾讯云上自建的ES集群或者在其它云厂商购买的ES集群,如果要迁移至腾讯云ES,用户可以根据自己的业务需要选择适合自己的迁移方案。如果业务可以停服或者可以暂...

2.9K9
来自专栏无所事事者爱嘲笑

mac上配置react-native环境run-ios/run-android命令遇到的问题

1903
来自专栏java思维导图

单点登录(SSO),从原理到实现

如果你觉得文字太长,可以直接先看文末思维导图总结,小编已为你整理了作者的主要观点,供你回顾与快速阅读~

2.7K6

扫码关注云+社区

领取腾讯云代金券