2013-03-20 2 views
0

내 웹 사이트에서 사용자를 인증하기 위해 사용자 이름/비밀번호 전략을 사용하여 PassportJS을 사용하고 있습니다. 누군가가 반환 한 후 (HTTPS를 통해)에 기록하고 있다면, 지금Express에서 로그인 한 사용자를 https로 리디렉션 하시겠습니까?

app.use(express.session({ 
    // ... 
    cookie: { secure:true } 
})); 

그러나 : 나는 사용자가 로그인에해야 HTTPS를 통해 확보 한, 나는 세션 쿠키는 HTTPS를 통해 전송되는 것을 보장했다 HTTP를 통한 웹 사이트, 브라우저가 쿠키를 보내지 않기 때문에 로그인하지 않은 것처럼 보입니다.

로그인 한 사용자를 HTTPS로 리디렉션하고 싶습니다.

두 개의 쿠키 (세션 세부 정보 (secure: true)와 "로그인 한 사람"(secure: false) 표시된 쿠키)을 발행해야한다는 것을 알았습니다. HTTP를 통해 두 번째 쿠키가 표시되면 HTTPS로 리디렉션 할 수 있으며 보안 쿠키가 전송됩니다. Presto : 로그인 한 사용자가 HTTPS로 리디렉션됩니다.

질문 : Express에서 어떻게해야합니까? ,

app.use(function(req, res, next) { 
    if (req.cookie.loggedin === '1' && ! req.secure()) 
    { 
    res.redirect(HTTPS_LOCATION); 
    } 
    else 
    { 
    next(); 
    } 
}); 

HTTPS_LOCATION의 값은 사용자의 설정에 따라 달라집니다

res.cookie('loggedin', '1', { secure : false /*, other options */ }); 

다음, 그 쿠키를 확인하는 미들웨어를 사용 : 사용자가 성공적으로 로그인하면

답변

0

는 쿠키를 설정 하지만 아마도 req.path을 사용하여 빌드 할 수 있습니다.

1

누군가가 HTTPS를 통해 사이트에 액세스하면 Strict-Transport-Securityheader을 추가하십시오. 이렇게하면 다음에 사이트를 방문 할 때 브라우저가 자동으로 HTTPS를 HTTPS로 다시 작성합니다.

app.use(function(req, res, next) { 
    if (req.secure()) { 
     res.header('Strict-Transport-Security', 'max-age=31536000'); 
    } 

    next(); 
}); 
+0

아주 멋진 해결책, 기억해야 할 것 :) – robertklep

관련 문제