2017-05-04 99 views
0

我想在NodeJS和Express後端腳本上使用Passport實現用戶重定向。我現在面臨的問題是,我的登錄頁面是不是我的默認主頁,但它是相當的:NodeJS護照重定向

localhost:3000/login 

我已經成功地讓這個如果用戶沒有註冊,他不能訪問其他網頁,例如作爲/index/dashboard但有些事,當我嘗試訪問硬編碼的網址,如突破:

如果我進入localhost:3000/我可以訪問即使我沒有登錄默認index.html頁面只是爲了澄清 - localhost:3000/index。 == localhost:3000

如果我決定來操作這樣的路線:localhost:3000/Example/pages/index.htmllocalhost:3000/Example/pages/dashboard.html它會允許我訪問頁面,即使我在我登錄

我的問題是,我怎麼能限制用戶操作的路線。默認主頁和其他沒有在Node後端聲明的頁面?

我的節點路由代碼:

app.get('/login', 
     function(req, res){ 
      res.sendFile(path.join(__dirname + '/login.html')); 
     }); 

    app.get('/index', isLoggedIn, 
     function(req, res){ 
      res.sendFile(path.join(__dirname + '/index.html')); 
     }); 


    app.post('/login', 
     passport.authenticate('local', { failureRedirect: '/login' }), 
     function(req, res) { 
      res.redirect('/index'); 
     }); 

     app.post('/login', 
    passport.authenticate('local', { failureRedirect: '/login' }), 
    function(req, res) { 
     res.redirect('/index'); 
    }); 

我已經使用這個嘗試:

app.use(function(req, res, next) { 
if (req.session.user == undefined) { 
     return res.render('/login', { failureRedirect:'/login' }); 
    } 
    else { 
     next(); 
    } 
}); 

但是我收到一個錯誤:沒有默認引擎指定並沒有提供擴展。我不想使用JADE或Handlebars或其他任何引擎,只是靜態的HTML。

我怎樣才能限制的路由操作,而不必定義我的節點頁面的其餘部分爲app.get(/something, function(req,res){});

回答

0

可以使護照中間件來檢查,如果用戶進行身份驗證

isAuthenticated = (req, res, next) => { 
    if (req.isAuthenticated()) { 
    return next(); 
    } 

    res.redirect('/login'); 
}; 

然後你可以做到這一點

app.get('/someroute', isAuthenticated, (req, res)=>{ 
    // do what you want 
}); 
+0

如果我只是''/''而不是'''/ someroute''或讓它爲空?它仍然可以用於靜態文件嗎? – coderJoe

+0

不管路線是什麼,你可以使用任何你想要的。這裏的想法是中間件是認證的。 –

+0

不工作Vanka。我仍然可以訪問默認主頁和操縱路線.. – coderJoe