簡體   English   中英

Express-公用目錄划分為授權/未經授權的用戶

[英]Express - public directory divided for authorized/unauthorized users

我有一個用express.js編寫的應用程序,並且試圖將此應用程序分為2個部分:

  • 一個用於未經授權的用戶(僅具有到/-登陸頁面,/ login和/ *-error404的路由)
  • 第二個(路線為:--登陸頁面,/ app / *-角度SPA,它將自行處理路線)

Express還配置為從/unauth/public/獲取靜態文件,並且我想添加第二個靜態文件夾以請求來自授權路由的請求- /auth/public轉到/ app / *

我的路線配置如下所示:

var authRoutes = express.Router();
var unauthRoutes = express.Router();

authRoutes.get('/app/*', function(req, res, next) {
    if(!req.isAuthenticated())
        return res.redirect("/login/");
    res.send("AUTHORIZED");
});

unauthRoutes.get('/', function(req, res, next) {
    res.send("LANDING PAGE");
});

unauthRoutes.get('/login/', function(req, res, next) {
    if(req.isAuthenticated())
        return res.redirect("/app/");
    res.send("LOGIN PAGE");
});

unauthRoutes.get('/registration/', function(req, res, next) {
    if(req.isAuthenticated())
        return res.redirect("/app/");
    res.send("REGISTRATION PAGE");
});

unauthRoutes.get('/*', function(req, res, next) {
    res.send("ERROR 404");
});

app.use('/', authRoutes);
app.use('/', unauthRoutes);

我試圖修改req.url並基於此調用另一個靜態oruter express.static('auth/public')

在授權路由中使用express.static中間件

但是我不知道如何處理路由app.get('/auth/*', ...) -之前的修改將替換url,並且永遠不會調用此路由。

您可以嘗試這樣的事情:

// Create your static middlewares
var unauthStatic = express.static('unauth/public');
var authStatic = express.static('auth/public');

// This goes in place of where you would normally load your static middleware
app.use(function(req, res, next) {
    if (req.isAuthenticated()) {
        authStatic(req, res, next);
    } else {
        unauthStatic(req, res, next);
    }
});

編輯:

如果希望通過身份驗證的用戶能夠訪問auth和unauth目錄中的文件,則可以對app.use進行兩次調用,如下所示:

app.use(unauthStatic);
app.use(function(req, res, next) {
    if (! req.isAuthenticated()) {
        return next();
    }
    authStatic(req, res, next);
});

請記住,express在堆棧中使用中間件,這意味着要滿足給定的請求,所有已注冊的中間件均按其use d的順序use 一旦一些中間件調用req.send,就不會再執行其他中間件。 無論如何,嘗試這樣的事情:

function Authorization(req, res, next) {
    if(!req.isAuthenticated())
        return res.redirect("/login");
    next();
}

var AnonRouter = express.Router()
    // GET /style.css will request /unauth/public/style.css
    .use(express.static('unauth/public'))
    .get('/', function (req, res) { })
    .get('/login', function (req, res) { });

var AuthRouter = express.Router()
    .use(Authorization)
    // GET /app/style.css will request /auth/public/style.css
    .use(express.static('auth/public')) 
    .get('*', function (req, res, next) {
       // Handle reqs for non-static files
    });

app.use('/', AnonRouter);
app.use('/app', AuthRouter);
app.get('*', function (req, res) {
    res.status(404).send('404!');
});

但是我不知道如何處理路由app.get('/ auth / *',...)-之前的修改將替換url,並且永遠不會調用此路由。

該語句使我認為,在調用express的靜態中間件 ,您正在嘗試以某種方式處理請求。 這是不可能的:靜態中間件提供靜態文件,並且這樣做后您將無法執行其他邏輯,但是您可以在之前運行東西! 請注意,在我的代碼中,授權中間件將在發送靜態文件之前運行。

暫無
暫無

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

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