2017-05-07 54 views
1

我建立了一個網站,作爲兩個URL(「/」,「/管理員」)會議在這裏發生衝突 是我app.js會話代碼如何在快遞JS來管理多個會話

app.use(logger('dev')); 
    app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({ extended: false })); 
    app.use(cookieParser()); 
    app.use(session({ 
     secret: "JHGF>,./?;;LJ8#$?,KL:>>>,,KJJJDHE", 
     resave: true, 
     saveUninitialized: true 
    })); 
    app.use(flash()); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(express.static(path.join(__dirname, 'public'))); 

    app.use('/', index); 
    app.use('/admin', admin); 

請我怎樣才能解決這個問題?

這裏是index.js

var express = require('express'); 

    var User = require('../models/user'); 
    var Admin = require('../models/admin'); 
    var Pandingpay = require('../models/pandingpay'); 
    var Confirmpay = require('../models/confirmpay'); 
    var passport = require('passport'); 
    var moment = require('moment'); 

    var router = express.Router(); 


    function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { 
    next(); 
    } else { 
    req.flash("info", "You must be logged in to see this page."); 
    res.redirect("/user/login"); 
    } 
    }; 
    function Authenticated(req, res, next) { 
    if (req.isAuthenticated()) { 
     res.redirect('/user/dashboard/'); 
    }else { 
    next(); 
    } 
    }; 

    router.use(function(req, res, next){ 
     res.locals.currentUser = req.user; 
     res.locals.errors = req.flash("error"); 
    res.locals.infos = req.flash("info"); 
    next(); 
    }); 

    /* GET home page. */ 
    router.get('/', function(req, res) { 
    res.render('index',{ 
      title: 'Home' 
     }); 
    }); 

    router.post('/login', function(req, res, next) { 
     passport.authenticate('user-local', {failureFlash:true}, function(err, user, info) { 
     if(!req.body.password || !req.body.username){ 
     req.flash("error", "Please enter your username and password"); 
     return res.redirect("/login"); 
    } 
    if (err) { return next(err); } 
    if (!user) { 
     req.flash("error", "Sorry username or password is invalied!"); 
     return res.redirect('/login'); 
    } 
     req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/dashboard'); 
     }); 
    })(req, res, next); 
    }); 

,這裏是我的admin.js

var express = require('express'); 

    var User = require('../models/user'); 
    var Admin = require('../models/admin'); 
    var Pandingpay = require('../models/pandingpay'); 
    var Confirmpay = require('../models/confirmpay'); 
    var passport = require('passport'); 
    var moment = require('moment'); 

    var routeradmin = express.Router(); 


    function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { 
     next(); 
    } else { 
     req.flash("info", "You must be logged in to see this page."); 
     res.redirect("/admin/login"); 
     } 
     }; 



     routeradmin.use(function(req, res, next){ 
     res.locals.currentUser = req.user; 
     res.locals.errors = req.flash("error"); 
     res.locals.infos = req.flash("info"); 
     next(); 
     }); 

     /* GET home page. */ 

     routeradmin.get('/login', function(req, res) { 
      res.render('adminlogin'); 
     }); 


     routeradmin.post('/login', function(req, res, next) { 
    passport.authenticate('admin-local', {failureFlash:true}, function(err, user, info) { 
    if(!req.body.password || !req.body.username){ 
     req.flash("error", "Please enter your username and password"); 
     return res.redirect("/admin/login"); 
    } 
    if (err) { return next(err); } 
    if (!user) { 
     req.flash("error", "Sorry username or password is invalied!"); 
     return res.redirect('/admin/login'); 
    } 
    req.logIn(user, function(err) { 
    if (err) { return next(err); } 
    return res.redirect('/admin/allusers/' + user.username); 
}); 
})(req, res, next); 
}); 

我的意思相互矛盾的是,當管理員登錄,而不是創建管理一個新的會話它使用已經登錄的會話useruser

+0

***「衝突」***是什麼意思?爲了我們能夠幫助您,我們需要確切地知道您觀察到的情況,以便我們瞭解您需要幫助的問題。我們可能還需要知道'index'和'admin'函數應該做什麼並查看它們的代碼。通常,像這樣的特定路由應該是'app.get('/',index)'不是'app.use()',但這取決於你想要對這些路由做什麼。需要看到更多的代碼。需要你來描述確切的問題。 「衝突」並不是一個精確的描述。 – jfriend00

+0

好吧我現在要更新我的代碼 – Emibrown

+0

我的代碼已更新 – Emibrown

回答

1

如果你想要兩個單獨的會話對象,一個用於常規用法,一個用於管理員用法,它們之間沒有重疊,那麼你必須做兩個單獨使用app.use('/path1', session(...))app.use('/path2', session(...))語句,因此您有兩個不同路徑的會話管理器,並確保每個會話管理器都有不同的cookie名稱(使用session()選項的name參數)。然後,您必須將您的網址設計爲這些網址的子路徑,以便他們找到正確的路徑。

通常,人們只使用一個會話,然後只是在會話中保持一個標誌,無論是否是管理員登錄,並且您可以在需要時檢查該標誌。

+0

非常感謝它的工作,但 – Emibrown

+0

非常感謝它的工作,但閃爍的消息不會改變,例如當繼續按鈕被點擊時在'/ user/login'中沒有任何登錄憑據,它會生成一個Flash消息「請輸入您的用戶名和密碼」,並且即使我重新加載消息仍然存在,此消息仍然存在此處是第[th]鏈接[http://swiftpay.cleverapps .IO /用戶/登錄/) – Emibrown