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

