nodejs session +MySQL+ejs身份权限验证

本文介绍如何使用Node.js及其相关模块如express-session、body-parser和cookie-parser实现用户登录、状态检查和退出功能。通过创建MySQL数据库,设置EJS模板引擎,以及利用中间件进行会话管理,构建了一个完整的用户认证系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 安装好所需要的环境
    1、express-session
    2、body-parser
    3、cookie-parser
    4、ejs 模板
    5、创建MySQL数据库在这里插入图片描述
  2. 创建工程目录
  3. 在这里插入图片描述
    app.js

var express = require('express');
var app = express();
var path = require('path');
var session = require('express-session');
var bodyparser = require('body-parser');
var login = require('./routes/login');
var status = require('./routes/status');
var logout = require('./routes/logout');
var cookieParser=require("cookie-parser");
// 下面三行设置渲染的引擎模板
app.set('views', path.join(__dirname, 'views')); //设置模板的目录
app.set('view engine', 'html'); // 设置解析模板文件类型:这里为html文件
app.engine('html', require('ejs').__express); // 使用ejs引擎解析html文件中ejs语法

app.use(bodyparser.json()); // 使用bodyparder中间件,
app.use(bodyparser.urlencoded({ extended: false}));
app.use(cookieParser());//这里要加()
// 使用 session 中间件
app.use(session({
    secret :  'spflinux', // 对session id 相关的cookie 进行签名
     name:'adminapp',
    resave : true,
    saveUninitialized: false, // 是否保存未初始化的会话
    cookie : {
        maxAge : 1000 , // 设置 session 的有效时间,单位毫秒
    },

}));

// 获取登录页面
app.use('/login',login);
// 判断用户状态
app.use('/',status);

// 退出
app.use('/logout',logout);
app.listen(8000);

db.js

//连接数据库
var mysql = require('mysql');
//创建连接池
var pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '********',
    database:'test'
});
// 封装数据对象
function Data()
{  
   // 定义查找成员信息
   this.selectid = function(data,callback)
   {    
       var sql="SELECT uid FROM t_user WHERE uname=? AND binary upwd=?";
       pool.getConnection(function(conn_err, conn) {
        if(conn_err) {
            callback(err,null,null);
        }
          else {
            conn.query(sql,data, function(query_err, result) {
            if (query_err) {
              console.log(" Error: " + query_err.message);
              return;
              }
                conn.release();
                // 释放连接池
                callback(query_err,result);
            });
        }
    });
   }

};

module.exports = Data;

login.js

var express = require('express');
var router = express.Router();
var Data = require("./db.js");
var Session = require('./session');
// 获取登录页面

router.get('/', function(req, res, next) {
    
       res.render('login.html',{msg:""});
      
    
});
// 用户登录
router.post('/', function(req, res, next) {
      var sedata = new Session();
      var data = [
       req.body.uname,
       req.body.upwd
      ];

      sedata.session(function(session)
        {  
           var face = new Data();
           
           face.selectid(data,function(err,result){
            if(result.length>0){
                req.session.userName = req.body.uname;
                res.redirect('/');
                 
            }else{
                res.render("login.html",{msg:"用户名或密码有误"});
            }
            
           });
           
        });
      
});
 
module.exports = router;

logout.js

var express = require('express');
var router = express.Router();
var Data = require("./db.js");
var Session = require('./session');

// 获取登录页面

router.get('/', function(req, res, next) {
       
      var sedata = new Session();
      sedata.session(function(session){
           req.session.userName = null; // 删除session
           
           res.redirect('login');
           
      });
    
});

 
module.exports = router;

session.js

   var express = require('express');
     var app = express();
     var session = require('express-session');
     var cookieParser=require("cookie-parser");
     app.use(cookieParser());//这里要加()
  app.use(session({
    secret :  'spflinux', // 对session id 相关的cookie 进行签名
     name:'adminapp',
    resave : false,
    saveUninitialized: false, // 是否保存未初始化的会话
    cookie : {
        maxAge : 1000 , // 设置 session 的有效时间,单位毫秒
    },

}));
function Session() {
	// body...
	this.session = function(callback)
	{

     callback(session);
	}
}
module.exports = Session;

status.js

var express = require('express');
var router = express.Router();
var Data = require("./db.js");
var Session = require('./session');
// 获取登录页面

router.get('/', function(req, res, next) {
       
      var sedata = new Session();
      sedata.session(function(session){
          if(req.session.userName){  //判断session 状态,如果有效,则返回主页,否则转到登录页面
               res.render('home.html',{username : req.session.userName,msg:"登录成功"});
          }  
          else{
          	 
               res.redirect('login');
          }
      });
    
});

 
module.exports = router;

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>用户名:<span><%= username %> </span>  <a href="/logout">退出登录</a></div>
</body>
</html>
<script type="text/javascript">
	alert("<%= msg%>");
</script>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Title</title>
    <style type="text/css">

    </style>
</head>
<body >
    <form action="/login" method="POST" id="myform" onclick="fomrReset()">
        用户名: <input type="text" name="uname"/>  <br>
        密码: <input type="password" name="upwd"/>
        <input type="submit" value="Submit" id="btn_smt" />
    </form>

</body>
</html>
<script type="text/javascript">
	var sc = " <%= msg%>";
	if(sc.length>1)
	{
		 alert(sc);
		 // js的空字符也算一个字节
	}
         
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42975115

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值