[英]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.