Express實現(xiàn)登錄驗證
本文實例為大家分享了Express實現(xiàn)登錄驗證的具體代碼,供大家參考,具體內(nèi)容如下
Express實現(xiàn)的路由登錄,這套代碼適用于很多場景,特此記錄,以備后用。
首先是主文件: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); // 處理提交的數(shù)據(jù)和文件 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')()); //后臺路由 // 靜態(tài)數(shù)據(jù) server.use(static('./static/'));
以上這是一個整體的結(jié)構(gòu)框架,后續(xù)只需要專注處理路由部分即可,以下是后臺路由部分。
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', {}); }); // 根據(jù)業(yè)務(wù)添加路由 router.use('/banners', require('./banners')()); return router; };
express的模塊化其實就是按路由一級一級的來定義的,接下來一起來看一下上面代碼中l(wèi)ogin代碼的實現(xiàn).
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) { // 返回的數(shù)據(jù)很簡單,實際要返回一個對象 res.status(500).send('數(shù)據(jù)庫連接錯誤').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'); } };
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Express + Session 實現(xiàn)登錄驗證功能
- Nodejs進(jìn)階:express+session實現(xiàn)簡易登錄身份認(rèn)證
- Node.js+Express+MySql實現(xiàn)用戶登錄注冊功能
- 用node和express連接mysql實現(xiàn)登錄注冊的實現(xiàn)代碼
- Node+Express+MongoDB實現(xiàn)登錄注冊功能實例
- express框架中使用jwt實現(xiàn)驗證的方法
- express + jwt + postMan驗證實現(xiàn)持久化登錄
- Vue+Express實現(xiàn)登錄狀態(tài)權(quán)限驗證的示例代碼
- nodejs使用express獲取get和post傳值及session驗證的方法
- DevExpress實現(xiàn)GridControl單元格編輯驗證的方法
相關(guān)文章
使用 Node.js 實現(xiàn)圖片的動態(tài)裁切及算法實例代碼詳解
這篇文章主要介紹了使用 Node.js 實現(xiàn)圖片的動態(tài)裁切功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09Mongoose經(jīng)常返回e11000 error的原因分析
這篇文章主要給大家分析了Mongoose經(jīng)常返回e11000 error的原因,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友可以們下面來一起看看吧。2017-03-03