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

 更新时间:2017年04月26日 10:23:08   作者:牙疼哥哥  
这篇文章主要介绍了node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

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

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

2.node.js平台下Express的session与cookie模块包的配置:https://www.jb51.net/article/112190.htm

3.node.js平台下的mysql数据库配置及连接:https://www.jb51.net/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>&nbsp;记住密码</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);

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

相关文章

  • Node.js开发 path路径模块详解

    Node.js开发 path路径模块详解

    path 模块是 Node.js 官方提供的、用来处理路径的模块,它提供了一系列的方法和属性,用来满足用户对路径的处理需求,这篇文章主要介绍了Node.js开发 path路径模块,需要的朋友可以参考下
    2024-02-02
  • node登录生成token并验证的实现

    node登录生成token并验证的实现

    token校验作为项目里的必要项,其重要性不言而喻,本文主要介绍了node登录生成token并验证的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • IDEA中配置运行node.js的完整过程

    IDEA中配置运行node.js的完整过程

    为了使在终端使用npm,我们可以配置环境变量,这篇文章主要给大家介绍了关于IDEA中配置运行node.js的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • package.json的版本号更新优化方法

    package.json的版本号更新优化方法

    这篇文章主要为大家介绍了package.json的版本号更新优化方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 如何在nodejs中体验http/2详解

    如何在nodejs中体验http/2详解

    HTTP/2主要利用多路复用传输,头部压缩,服务端推送,可以减少网络延迟对性能带来的影响,优化首次访问速度,提高传输效率,下面这篇文章主要给大家介绍了关于如何在nodejs中体验http/2的相关资料,需要的朋友可以参考下
    2022-12-12
  • 对mac下nodejs 更新到最新版本的最新方法(推荐)

    对mac下nodejs 更新到最新版本的最新方法(推荐)

    今天小编就为大家分享一篇对mac下nodejs 更新到最新版本的最新方法(推荐),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • npm 语义版本控制详解

    npm 语义版本控制详解

    这篇文章主要介绍了npm 语义版本控制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • node.js读取Excel数据(下载图片)的方法示例

    node.js读取Excel数据(下载图片)的方法示例

    这篇文章主要给大家介绍了关于node.js读取Excel数据(下载图片)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用node.js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • 手把手教你用Node.js爬虫爬取网站数据的方法

    手把手教你用Node.js爬虫爬取网站数据的方法

    这篇文章主要介绍了手把手教你用Node.js爬虫爬取网站数据,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • npm dose not support Node.js v10.15.3的解决方法

    npm dose not support Node.js v10.15

    这篇文章主要给大家介绍了关npm dose not support Node.js v10.15.3的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11

最新评论