簡體   English   中英

授權用戶的節點快速文件夾訪問

[英]node express folder access for authorized users

我試圖讓用戶保存和下載 static 個文件。 但是只有登錄(授權)用戶才能訪問這些文件。

路線/files.js

var express = require('express');
var router = express.Router();

/* Get files */
router.get('/*', isLoggedIn, function(req, res, next) {
 console.log('get files called ');
 express.static(path.join(__dirname, 'files'));
});

function isLoggedIn(req, res, next){
 if(req.isAuthenticated()) return next();
 res.redirect('/');
}

module.exports = router;

這適用於任何獲取請求,但不適用於 static 文件。 無需登錄即可訪問它們。

應用程序.js

 var filesRouter = require('./routes/files');
 app.use(express.static(__dirname));
 app.use('/files', filesRouter);

我一定是遺漏了一些簡單的東西 - 謝謝!!

調用express.static(path.join(__dirname, 'files')); 只是返回一個中間件 function。它實際上並沒有執行更多的東西。 在您調用它返回的 function 之前,它不會提供任何文件。 您可以獲得中間件 function 一次,然后有條件地執行它,但這樣做更容易:

/* Get files */
router.get('/*', isLoggedIn, express.static(path.join(__dirname, 'files')));

你應該使用express.static作為中間件。 然后只允許經過身份驗證的用戶訪問文件,您可以在它之前注冊 isLoggedIn 中間件。 請看下面的代碼,這應該可以工作。

var express = require('express');
var router = express.Router();

router.use(isLoggedIn); // this must come before express.static
router.use(express.static(path.join(__dirname, 'files')));

/* Get files */
router.get('/*', function(req, res, next) {
 console.log('get files called ');
});

function isLoggedIn(req, res, next){
 if(req.isAuthenticated()) return next();
 res.redirect('/');
}

module.exports = router;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM