2012-06-21 4 views
0

을 확인 나는, 나를 여기에 사용자 인증을 확인 할 수 있습니다 미들웨어있다 : 사용자 인증

function checkAuth(req, res, next) { 
if (!req.session.user_id) { 
    res.redirect('/login'); 
} else { 
    next(); 
} 
} 

내가 그것에 대해 두 가지 질문이 있습니다;

  1. 강력한 사용자 인증 확인 기능이 있습니까?

    if (!req.session.user_id) { 
        res.redirect('/login'); 
    } else { 
        User.findById(req.session.user_id, function (err, user) { 
        if (!user) return res.redirect('/login'); 
        else return next(); 
    }) 
    } 
    
  2. 을 점검 내가 페이지 로그인 리디렉션 않는 실패한 경우 : 또는 다음과 같이 내가 DB에 user.id 확인해야

    res.redirect('/login'); 
    

    을하지만 내가 AJAX 요청을받을 경우, 나는에해야

    res.send(403, 'Permission denied'); 
    

    그래서 요청 유형을 확인하고 적절한 유형의 응답을 보내려면 어떻게해야합니까? 위와 같이하는 것이 올바른 방법입니까?

답변

4

세션 확인으로 충분합니다. 서버의 세션과 클라이언트 사이에는 매핑이 있기 때문에 충분히 안전합니다. 물론 절대 보안을 원한다면 SSL을 사용합니다 (그러나 100 % 보안은 존재하지 않습니다). 여기

은 얼마나 장고/RoR에 확인 요청 (Node.js를 코드로 변환)는 AJAX 호출에서 오는 경우 : 그러나

function isXHR(req, res) { 
    return !!req.header('HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest'; 
} 

는 XHR 호출이 HTTP 헤더를 포함해야한다는 것을 의미합니다. 대부분의 라이브러리 (jQuery, Dojo, YUI, ...)를 사용하지만 수동 XHR 요청을하는 경우이를 포함하는 것을 잊지 말아야합니다. 사용자의 요구에 맞게 수

또 다른 방법 :이

function isJSON(req, res) { 
    return !!req.header('Content-Type') === 'application/json'; 
} 

, 당신은 Content-Type 헤더를 확인하고 있습니다. 대부분의 XHR 요청과 마찬가지로 일부 JSON 데이터를 요청하면 일부 JSON 데이터를 보냅니다.

+0

HTTP_X_REQUESTED_WITH을 (를) 프록시로 제거 할 수 있다고 들었습니까? – Erik

+0

입니다. 프록시는 HTTP 요청으로 무엇이든 할 수 있습니다. 그러나 무엇이든 가짜/변경 될 수 있기 때문에 그렇지 않으면, 신뢰할 수있는 방법이 없습니다. 다른 방법은'Content-Type' 헤더를 확인하고,'application/json'을 요청하면 JSON 데이터를 보냅니다. –

+0

감사합니다. 첫 번째 질문은 무엇입니까? – Erik