基於session的用戶登陸識別

框架expressjavascript

依賴的session模塊express-sessionhtml

1 主頁面app.jsjava

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.jsmysql

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.jssql

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.jsmongodb

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.jadeexpress

extends layout
block content
  h1 #{showname} 
  h1 #{success}
  h1 #{error}
  a(href='/logout')登出
  p 這是主頁

7登陸模板 login.jadejson

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
相關文章
相關標籤/搜索