2014-10-19 2 views
1

내가 응용 프로그램은 express.js로 작성하고 난 2 개 섹션이 응용 프로그램을 분할하기 위해 노력하고있어 분단 공공 디렉토리 만에 경로로 (권한이없는 사용자를위한익스프레스 - 허가 된/허가받지 않은 사용자

  • 하나/- 방문 페이지/로그인 및/* - error404)
  • 및 초 (경로는 다음과 같습니다/- 방문 페이지,/응용 프로그램/* - 자체 라우팅 처리 할 각 SPA)

익스프레스 또한 정적 파일을 가져 오도록 구성되었습니다. /unauth/public/ A 차 나는 권한이 루트에서 요청에 대한 두 번째 정적 폴더를 추가 할 - 이동 /auth/public 에/응용 프로그램/*

내 경로 설정은 다음과 같습니다

: 나는 req.url과 전화를 수정하려고

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); 

이에 따라 다른 정적 oruter express.static('auth/public') :

Using express.static middleware in an authorized route

하지만 나도 몰라, 경로 app.get('/auth/*', ...)을 처리하는 방법 - 이전의 수정이 대체합니다

// 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); 
    } 
}); 

편집 :

당신이 인증 된 사용자가 모두 인증 파일에 액세스 할 수 있도록하려면 및 URL과 호출되지 않습니다이 경로 ..

답변

2

이 뭔가를 시도 할 수 UNAUTH 디렉토리, 당신은 다음과 같이 app.use 두 통화를 할 수 있습니다 :

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

이 명시 적 기억은 스택에 미들웨어를 사용하여 주어진 요청을 처리하는 의미 , 등록 된 모든 미들웨어는 use d의 순서로 사용됩니다. 일단 약간의 미들웨어가 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을 처리하는 방법을 모르겠어요 - 이전 수정 교체 할 URL과이 경로가 호출되지 않습니다 ..

이 문은 내가 어떻게 든 표현의 정적 미들웨어가 호출 된 후 요청을 처리하기 위해 노력하고 있다고 생각합니다. 이것은 불가능합니다 : 정적 미들웨어는 정적 파일을 제공하고 이후에 추가 논리를 실행할 수 없지만 이전에 물건을 실행할 수 있습니다! 내 코드에서 정적 파일을 보내기 전에 권한 부여 미들웨어가 실행됩니다.