node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)


Posted in Javascript onApril 26, 2017

此内容需有node.js+express+mysql入门基础,若基础薄弱,可参考博主的其他几篇node.js博文:

1.下载Mysql数据库,安装并配置。创建用户表供登录使用:

node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)

2.node.js平台下Express的session与cookie模块包的配置:https://3water.com/article/112190.htm

3.node.js平台下的mysql数据库配置及连接:https://3water.com/article/110079.htm

完成前两步后需下载配置Ejs模块包:

*下载ejs模块包:npm install ejs --save-dev

*配置ejs:

/*设置模板资源路径*/
  app.set ("views",__dirname+"/views");  //视图模板都在这个文件夹
  /*自定义文件后缀名,设置模板引擎*/
  app.engine("html",ejs.__express);
  app.set("view engine","html");  //设置模板引擎,代表视图后缀名是ejs

4.登录页面(login.html)

<div class="registerBg">
  <section class="registerBox bd">
    <div class="regTittle">登陆</div>
    <form method="post" action="/login.do">
      <input type="text" class="phone" placeholder="请输入手机号" id="phone" name="phone">
      <input type="password" placeholder="请输入密码" class="pwd" name="pwd" id="pwd"/>
      <div class="other bd">
        <label class="obey bd" ><input type="checkbox" id="remPwd" checked> 记住密码</label><a class="forgetPwd">忘记密码?</a>
      </div>
      <button class="doReg" id="doLogin">登陆</button>
    </form>
  </section>
</div>

5.登陆界面点击登录按钮后,服务器入口文件(app.js)拦截路由/login.do

const per = require("./routes/perData.js");       //服务器入口文件引入perData.js
app.post("/Login.do",per.doLogin);

6.拦截路由后分发给路由处理文件(perData.js),perData.js暴露/login.do的接口,并提供处理函数。

////登录验证
exports.doLogin=function(req,res){
  console.log(req.body.phone);
  console.log(req.body.pwd);
  db.connect("select * from t_user where u_tel=? and u_pwd=?",[req.body.phone,req.body.pwd],function(err,data){
    console.log(data.length);
    if(data.length>0){



//此处应有判断用户在login.html中是否点击了记住密码,本文方便思路理解,默认用户已点击“记住密码”




//确定用户是否点击checkBox的方法:




//1.原生js: document.getElementById("remPwd").checked




//2.jquery: $("#remPwd").is(":checked")
      res.cookie("user",{"user":req.body.phone,"pwd":req.body.pwd},{maxAge:1000*60*60});    //登陆成功后将用户和密码写入Cookie,maxAge为cookie过期时间
      req.session.user=req.body.phone;                             //服务器端session保存登陆的会话状态
      res.render("perCenter",{u_tel:req.session.user});











//ejs模板引擎渲染用户中心页面(perCenter.js),并将u_tel数据返回给前台
    }
  })
};

*perCenter.js视图页面如下,<%=u_tel%>为ejs语法的定义变量,直接将后台返回的u_tel嵌入视图页面中。

<div class="navBox container-fluid">
  <div class="row">
    <span class="col-lg-2 col-md-2 icon-lianxi contact alignLeft"> 010-65596969</span>
    <span class="col-lg-2 col-md-2 icon-denglu contact col-lg-push-8 col-md-push-2 alignRight"><%=u_tel%></span>    
  </div>
</div>

7.至此完成整个的登录过程,并在用户点击了“记住密码”后,将用户信息写入cookie,并设置了cookie的过期时间。现在需要完善的是,在用户关闭了浏览器窗口后,cookie未过期的前提下,第二次登陆网站会直接显示登录状态,所以需要在服务器入口文件中(app.js)拦截服务器根目录路由,并根据cookie做出判断。

app.get("/",function(req,res){
  if(req.cookies.user){            //cookie中存在用户信息,则直接返回登陆页面
    res.render("perCenter",{u_tel:req.cookies.user.user})
  }else{
    res.redirect("index.html");      //否则正常显示网站的index.html页面
  }

});

*附app.js配置文件全部内容:

const express = require("express");
const app = express(); 
const session = require("express-session");
const cookie = require("cookie-parser");
const ejs = require("ejs");
const per = require("./routes/perData.js");

app.configure(function(){
  app.use(cookie());
  app.use(session({
    name:"final",
    secret:"1234567",
    cookie:{maxAge:10000},  //毫秒为单位
    resave:true,
    rolling:true
  }));
  app.set ("views",__dirname+"/views");  
  app.engine("html",ejs.__express);
  app.set("view engine","html");  
  app.use(express.logger("dev")); 
  app.use(express.bodyParser()); 
  app.use(express.methodOverride()); 
  app.use(app.router); 
  app.use(express.static(__dirname+"/public"));  
  //app.use(express.favicon(__dirname+"/public/images/favicon.ico")); 
  app.use(express.errorHandler());  
});
app.set("port",8889);

app.listen(app.get("port"),function(){
  console.log("启动成功"+app.get("port"))
});


/*======路由分发======*/
app.get("/",function(req,res){
  if(req.cookies.user){
    res.render("perCenter",{u_tel:req.cookies.user.user})
  }else{
    res.redirect("index.html");
  }

});
app.post("/Login.do",per.doLogin);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS扩展 垂直tabLayout实现代码
Jun 21 Javascript
Jquery中Event对象属性小结
Feb 27 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
JavaScript生成指定范围的时间列表
Mar 19 Javascript
详解React中setState回调函数
Jun 14 Javascript
js replace替换字符串同时替换多个方法
Nov 27 Javascript
微信小程序中如何使用flyio封装网络请求
Jul 03 Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 Javascript
JS实现可以用键盘方向键控制的动画
Dec 11 Javascript
Vue.js实现文章评论和回复评论功能
May 30 #Javascript
详解node.js平台下Express的session与cookie模块包的配置
Apr 26 #Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 #jQuery
快速使用node.js进行web开发详解
Apr 26 #Javascript
js canvas实现擦除效果示例代码
Apr 26 #Javascript
vue-cli如何快速构建vue项目
Apr 26 #Javascript
Vue制作Todo List网页
Apr 26 #Javascript
You might like
浅析php变量作用域的一些问题
2013/08/08 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
Win10下Python环境搭建与配置教程
2016/11/18 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
Python中six模块基础用法
2019/12/08 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
Hibernate持久层技术
2013/12/16 面试题
请假条范文大全
2014/04/10 职场文书
保密协议书范本
2014/04/22 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
介绍信的格式
2015/01/30 职场文书
预备党员群众意见
2015/06/01 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL