框架express
依賴的session模塊express-session
1 主頁面app.js
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes');
var session = require('express-session');
var index = require('./routes/index');
var flash = require('connect-flash');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(flash());
app.use(session({
name: 'kk',// 設置 cookie 中保存 session id 的字段名稱
secret: 'kk',// 通過設置 secret 來計算 hash 值並放在 cookie 中,使產生的 signedCookie 防篡改
cookie: {
maxAge: 2592000000// 過期時間,過期后 cookie 中的 session id 自動刪除
},
resave: false,
saveUninitialized: true, //本應用中是將session存儲到內存中。
//store: new MongoStore({// 將 session 存儲到 mongodb
//url: 'mongodb://localhost:27017/kk'// mongodb 地址
//})
}));
app.use(function (req, res, next) {
res.locals.user = req.session.user; 應用變量
res.locals.showname = req.session.showname;
res.locals.success = req.flash('success');
res.locals.error = req.flash('error');
next();
});
routes(app);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
2 路由文件index.js
module.exports = function (app) {
app.get('/', function (req, res) {
if (!req.session.user) { //如果未有用戶登錄,跳轉至登錄
res.redirect('/login');
}
if (req.session.user) {
res.redirect('/home'); //如果已經有用戶登錄,跳轉至住頁面
}
});
app.use('/login', require('./login')); //登錄界面路由
app.use('/home', require('./home')); // 主頁面路由
app.use('/logout', require('./logout')); //登出路由
// 404 page
app.use(function (req, res) {
if (!res.headersSent) {
res.render('404');
}
});
};
3 登錄文件 login.js
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var md5 = require('md5');
var connection = mysql.createConnection({host: '10.0.6.14', user: 'root', password: '123456', database: 'cop_c'});
//連接數據庫
connection.connect();
router.get('/', function(req, res, next) {
key = req.query.key;
if (!key || (key.length !== 32)) { //安全機制,為每一個登錄用戶分配一個32為的key,在登錄時以 http://ip/login?key=12234...32進行登錄,如果沒有key或者key不是32位,顯示空白頁面。
res.send('');
}
if (req.session.user) { //如果已有用戶登錄,則跳轉至主頁面。
res.redirect('/home');
}
res.render('login');
});
router.post('/', function(req, res, next) {
var user = req.body.user;
var xx = req.body.passwd;
var passwd = md5(xx); //數據庫中存儲的是經過md5加密的密碼。
sql = 'select showname from o_users where username="' + user + '" ' + 'and passwd= "' + passwd + '"and `key`="' + key + '"';
//showname是顯示在主頁面的用戶名,存儲在數據庫中。
connection.query(sql, function(err, rows, fields) {
if (err) throw err;
if (rows.length==0) { //如果查詢到數據庫中有相匹配的用戶,則登錄,否則重新登錄
req.flash('error', '用戶密碼錯誤')
res.redirect('/login?key='+key);
}else {
req.session.showname=rows[0].showname;
req.session.user = user;
req.flash('success', '登錄成功')
res.redirect('/home?key='+key);
}
});
});
module.exports = router;
4 主頁面index.js
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
if(req.session.user){
res.render('home',{name:req.session.showname})
}else{
res.redirect('/login')
}
});
module.exports = router;
5 登出文件logout.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
req.session.user = null;
req.session.showname = null;
res.redirect('/login')
});
module.exports = router;
6主頁面模板 home.jade
extends layout
block content
h1 #{showname}
h1 #{success}
h1 #{error}
a(href='/logout')登出
p 這是主頁
7登錄模板 login.jade
extends layout
block content
.container
h1 #{error}
h1 #{success}
form.form-signin(method="post", action="/login")
h2 請登陸
.form-group
label.sr-only 用戶名
input.form-control#inputUser(placeholder="用戶名", name="user", required, autofocus )
label.sr-only 密碼
input.form-control#inputPassword(placeholder="密碼", name="passwd",type="password" required, autofocus)
button.btn.btn-lg.btn-primary.btn-block(type="submit") Sign in
