您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

Express实现登录验证

51自学网 2022-02-21 13:39:57
  javascript

本文实例为大家分享了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');    }};

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


下载地址:
JS+Canvas绘制抽奖转盘
TypeScript枚举的基础知识及实例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。