1. 程式人生 > 程式設計 >Express實現登入驗證

Express實現登入驗證

本文例項為大家分享了Express實現登入驗證的具體程式碼,供大家參考,具體內容如下

Express實現的路由登入,這套程式碼適用於很多場景,特此記錄,以備後用。

首先是主檔案:servehttp://www.cppcns.comr.

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  = 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'QVfZYmL
,require('./login')()); // 正常登入後後其它路由 router.get('/www.cppcns.com',(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',QVfZYmL
password: '123456',database: 'blog' }); module.exports = function () { var router = express.Router(); router.get('/',res) => { res.render('admin/login.ejs',{}); }); router.post('/',res) => { var username = req.body.username; var password = common.md5(req.body.password + common.MD5_SUFFIX); db.query(`SELECT * FROM admin_table WHhttp://www.cppcns.comERE 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');
    }
};

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。