Express实现登录验证

 更新时间:2021年10月13日 09:39:09   作者:aiguangyuan  
这篇文章主要为大家详细介绍了Express实现登录验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Express实现登录验证的具体代码,供大家参考,具体内容如下

Express实现的路由登录,这套代码适用于很多场景,特此记录,以备后用。

首先是主文件:server.js

const express = require('express');
const static = require('express-static');
const bodyParser = require('body-parser');
const multer = require('multer');
// 配置文件上传的路径,此处为本地地址
const multerObj = multer({ dest: './static/upload' });
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const consolidate = require('consolidate');
 
// 子路由的页面需要使用,此处确保已安装
const expressRoute = require('express-route');
const mysql = require('mysql');
 
var server = express();
server.listen(8080);
 
// 处理提交的数据和文件
server.use(bodyParser.urlencoded());
server.use(multerObj.any());
 
// cookie及签名处理
server.use(cookieParser());
(function () {
    var keys = [];
    for (var i = 0; i < 100000; i++) {
        keys[i] = 'secret' + Math.random();
    };
    server.use(cookieSession({
        name: 'session_id',
        keys: keys,
        maxAge: 20 * 60 * 1000  
    }));
})();
 
// 模板渲染
server.engine('html', consolidate.ejs);
server.set('views', 'template');
server.set('view engine', 'html');
 
// 路由拆分
server.use('/', require('./route/web/index.js')());        //前台路由
server.use('/admin/', require('./route/admin/index.js')());   //后台路由
 
// 静态数据
server.use(static('./static/'));

以上这是一个整体的结构框架,后续只需要专注处理路由部分即可,以下是后台路由部分。

const express = require('express');
 
module.exports = function () {
 
    var router = express.Router();
 
    // 未登录前
    router.use((req, res, next) => {
        if (!req.session['admin_id'] && req.url != '/login') { 
            res.redirect('/admin/login');
        } else {
            next();
        }
    });
    router.use('/login', require('./login')());
 
    
    // 正常登录后后其它路由
    router.get('/', (req, res) => {
        res.render('admin/index.ejs', {});
    });
    // 根据业务添加路由
    router.use('/banners', require('./banners')());
 
    return router;
};

express的模块化其实就是按路由一级一级的来定义的,接下来一起来看一下上面代码中login代码的实现.

const express = require('express');
// 封装的公共方法(md5)加密模块
const common = require('../../libs/common');
const mysql = require('mysql');
 
var db = mysql.createPool({ 
    host: 'localhost', 
    user: 'root', 
    password: '123456', 
    database: 'blog' 
});
 
module.exports = function () {
    var router = express.Router();
    router.get('/', (req, res) => {
        res.render('admin/login.ejs', {});
    });
    
    router.post('/', (req, res) => {
        var username = req.body.username;
        var password = common.md5(req.body.password + common.MD5_SUFFIX);
        db.query(`SELECT * FROM admin_table WHERE username='${username}'`, (err, data) => {
            if (err) {
                // 返回的数据很简单,实际要返回一个对象
                res.status(500).send('数据库连接错误').end();
            } else {
                if (data.length == 0) {
                    res.status(400).send('管理员不存在').end();
                } else {
                    if (data[0].password == password) {
                        req.session['admin_id'] = data[0].ID;
                        res.redirect('/admin/');
                    } else {
                        res.status(400).send('密码错误').end();
                    }
                }
            }
        });
    });
 
    return router;
};

大家可能注意到上面的代码中有个common模块的引入,这个文件主要是定义了一些公共的方法,如md5加密方法。

const crypto = require('crypto');
module.exports = {
    MD5_SUFFIX: 'FDSW$t34tregt5tO&$(#RHuyoyiUYE*&OI$HRLuy87odlfh)',
    md5: function (str) {
        var obj = crypto.createHash('md5');
        obj.update(str);
        return obj.digest('hex');
    }
};

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

相关文章

  • Node.js中path模块操作路径的基本使用

    Node.js中path模块操作路径的基本使用

    这篇文章主要介绍了Node.js中path模块操作路径的基本使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 异步JavaScript编程中的Promise使用方法

    异步JavaScript编程中的Promise使用方法

    这篇文章主要介绍了异步JavaScript编程中的Promise使用方法,包含Ajax的结合操作等问题,需要的朋友可以参考下
    2015-07-07
  • node.js中的console.dir方法使用说明

    node.js中的console.dir方法使用说明

    这篇文章主要介绍了node.js中的console.dir方法使用说明,本文介绍了console.dir的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • NestJS中集成TypeORM进行数据库操作

    NestJS中集成TypeORM进行数据库操作

    本文深入探讨了如何在NestJS中集成TypeORM进行数据库操作,包括TypeORM的配置和集成、实体设计和关系映射、Repository模式的应用、事务处理方案、数据库迁移管理、性能优化策略
    2024-12-12
  • 详解nvm管理多版本node踩坑

    详解nvm管理多版本node踩坑

    这篇文章主要介绍了详解nvm管理多版本node踩坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Node.js实现文件上传

    Node.js实现文件上传

    这篇文章主要介绍了Node.js实现文件上传的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Nodejs+angularjs结合multiparty实现多图片上传的示例代码

    Nodejs+angularjs结合multiparty实现多图片上传的示例代码

    这篇文章主要介绍了Nodejs+angularjs结合multiparty实现多图片上传的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • node.js-path模块你了解多少

    node.js-path模块你了解多少

    这篇文章主要为大家详细介绍了node.js-path模块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 基于node.js实现爬虫的讲解

    基于node.js实现爬虫的讲解

    今天小编就为大家分享一篇关于基于node.js实现爬虫的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 使用NVM实现不同nodejs版本的自由切换

    使用NVM实现不同nodejs版本的自由切换

    在工作中,我们可能需要同时进行多个不同NodeJS版本的项目开发,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,NVM就是为解决这个问题而产生的,本文给出了下载、安装及使用方法,需要的朋友可以参考下
    2024-02-02

最新评论