2014-10-09 84 views
0

我在嘗試驗證用戶在查看快速目錄文件樹之前遇到問題。我可以在所有其他頁面上進行身份驗證,但即使在下載文件之前通過身份驗證路徑,也無法在「/ dat /:file(*)」上進行身份驗證。 因此,當用戶轉到'/'時,如果他們沒有登錄,express會重定向他們。但是,如果用戶轉到'/ dat',express將不會進行身份驗證,並允許他們瀏覽文件樹。我使用[email protected],任何幫助都會很棒。謝謝!在Express中提供目錄之前進行身份驗證

app.configure(function() { 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 

    app.use('/', express.static(__dirname + '/public')); 
    app.use('/dat', express.directory(__dirname + '/public/dat', {hidden: true, icons: true})); 

    app.use(express.json()); 
    app.use(express.urlencoded()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser('secret')); 
    app.use(express.session({ 
     secret: 'secret', 
     maxAge: 3600000 
    })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(app.router); 
}); 

app.get('/', ensure_authenticated, routes.index); 
app.get('/dat/:file(*)', ensure_authenticated, function(req, res, next) { 
    var path = __dirname + '/' + req.params.file; 
    res.download(path); 
}); 

回答

1

中間件的順序很重要。

app.use('/dat', express.directory(__dirname + '/public/dat', {hidden: true, icons: true})); 

之前:

app.get('/dat/:file(*)', ensure_authenticated, function(req, res, next) { 
    var path = __dirname + '/' + req.params.file; 
    res.download(path); 
}); 

其結果是,第一中間件處理該請求。

app.use(app.router))之後移動第一條路線應該解決這個問題。

您也想加入ensure_authenticate的路線express.directory如果你希望用戶進行身份驗證,看看上市以及目錄。

app.use('/dat', ensure_authenticate, express.directory ... 
+0

謝謝Jordonias這是有道理的,並要求在路由到「/ dat」之前進行身份驗證。然而,現在當我進行身份驗證然後轉到'/ dat'時,它會嘗試提供靜態html文件而不是文件樹。 – 2014-10-09 18:06:19

相關問題