2012-07-25 4 views
3

expressjs와 협력 중이며 세션을 사용하여 로그인 할 때 사용자를 인증하려고합니다. 사이트/앱은 한편으로는 사용자가 이러한 페이지의 캐싱을 허용하는 Stateless 웹 페이지의 여러 제품 및 정보를 탐색하고 조사 할 수 있어야하지만 다른 한편으로 세션을 사용하여 사용자가 로그인하고 다른 콘텐츠에 액세스 할 수있게하는 기능을 가져야합니다 .Express.js 세션이 경로 하위 집합에서 활성화되었습니다.

내 경로의 하위 집합에 대해 세션 상태를 활성화하고 상속 하위 집합 (내 경로의 나머지 부분)에 대해 익스프레스 세션을 비활성화해야 이러한 페이지를 캐싱 할 수 있습니다.

어떻게해야합니까?

세션을 활성화하려는 경로가 '/ kj % C3 % B8p', '/ bibliotek'및 '/ register'라고 말하십시오.

나는

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

    var pageName = 'somepage'; 
    var oneYear = 1000*60*60*24*365; 
    app.use(express.bodyParser()); 
    app.use('/kj%C3%B8p', express.cookieParser()); 
    app.use('/kj%C3%B8p', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path:'/', maxAge: (5*oneYear), httpOnly: true}})); 
    app.use('/bibliotek', express.cookieParser()); 
    app.use('/bibliotek', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path: '/', maxAge: (5*oneYear), httpOnly: true}})); 
    app.use('/registrer', express.cookieParser()); 
    app.use('/registrer', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path:'/', maxAge: (5*oneYear), httpOnly: true}})); 

    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 

}); 

같은 시도하지만이 세 가지 경로 각각에 대한 세션 객체를 다시 생성하고, 아주 지저분한 것 같다. 어떤 팁?

답변

5

특정 URL을 검정색 또는 허용 목록에 추가하는 기능으로 미들웨어를 래핑 할 수 있습니다. 이 화이트리스트 예이다 : 당신은뿐만 아니라 다른 미들웨어에 대해 동일한 기술을 사용할 수 있습니다

app.use(allow(['/bibliotek', '/registrer'], express.cookieParser())); 

:

function allow(paths, fn) { 
    return function(req, res, next) { 
    if (~paths.indexOf(req.url)) { 
     return fn(req, res, next); 
    } 
    next(); 
    } 
} 

당신은 같은 미들웨어 감아. 이것은 표현 작성자가 irc에서 보여준 gist을 기반으로했습니다.

+0

와우, 이것은 아주 깨끗한 해결책입니다. – rdrey

+0

감사합니다. 정말로 깨끗합니다. – torgebo

+0

이 접근법에 대한 실질적인 문제가있는 것으로 보입니다. - 페이지의 다른 소스가 app.use를 호출하기 때문에 거부 기능을 사용하는 것이 효과가없는 것 같습니다 (예 : 페이지의 이미지가 app.use를 호출 함). 이들을 지정해야한다는 것을 부인하십시오.) – torgebo

관련 문제