2011-03-28 5 views
1

인증 동작을 수정하여 xhr을 통해 클라이언트 측에서 전체 프로세스를 수행 할 수 있습니다. 예를 들어 login form을 sumbit 할 때 login_handler는 새로운 html 페이지를로드하거나 임의의 리다이렉션 대신에 성공 및 오류에 대한 일부 json 데이터를 리턴합니다. 이 일을하기 위해 무엇을 조사해야합니까?XHR을 통한 로그인

답변

1

사용자 이름과 암호를 추출하여 매개 변수로 로그인 스크립트로 보내면 사용자의 유효성을 검사하고 이에 따라 결과를 반환 할 수 있습니다. 프로세스 자체가 보안 문제와 취약점으로을 가득이기 때문에,

if($_REQUEST['username'] == "correct_username" && $_REQUEST['password'] == "correct_password"){ 
    return json_encode(array("success" => true, "data" => "stuff")); 
}else{ 
    return json_encode(array("success" => false)); 
} 

나는이에 대한 제안, 그래도 :

$.ajax({ 
    url: "login.php", 
    data: "username="+$("#username")+"&password="+$("#password"), 
    method: 'GET', 
    dataType: 'json', 
    async: false, 
    success: function(msg){ 
     if(msg.success){ 
      $("#content_area").html(msg.data); 
     } 
    } 
}); 

어디 스크립트는 다음과 같이 보일 것이다. 서버에 자격 증명을 안전하게 게시하고 웹 서버가 세션을 처리하고 쿠키를 설정하고 적절하게 인증하도록 허용 한 다음 시도하십시오.

+0

는, 내가 repoze.who의 사전 동작을 수정 가겠어요 방법이다. – rhyek

+1

좀 더 구체적으로, 나는 repoze 뒤에 아이디어를 이해하려고 노력하고 있습니다. 플러그인, 그리고 지금까지 나는 이것에 대해 갈 길이되어야한다는 것을 알았지 만, 내가 필요한 것을 얻기 위해 어떤 예제도 찾지 못했습니다. – rhyek

2

식별자를 가져 와서 remember 메서드를 호출하여 고유 한 로그인 컨트롤러를 작성할 수 있어야합니다.

는 먼저, 데이터베이스에서 사용자를 검색 할 암호를 확인하고 모든 것이 맞다면 당신은 인증 쿠키 설정할 수 있습니다 성공을 확인

response.headers = request.environ['repoze.who.plugins']['main_identifier'].remember(request.environ, {'repoze.who.userid':user_name}) 

은 또한 끝에 컨트롤러에서 JSON의 딕셔너리를 반환하거나하지 UI 목적을 위해

2

나는 TG2로 똑같은 일을하려했다. 이것은 amol의 답변을 연장 한 것입니다. 나는 그것을 사용하고 그것은 나를 위해 잘 작동합니다. 내가 무엇을 찾고 무엇을 말하는 것은 TG2 때문에 파이썬과에 적용 할 수 있지만

@expose("json") 
def login(self, login, password): 

    identity = {"login": login, 
       "password": password} 

    # Authenticate the credentials 
    username = request.environ['repoze.who.plugins']['sqlauth'].authenticate(request.environ, identity) 

    if username: 
     print("Logged into " + username) 
     # Remember this user 
     response.headers = request.environ['repoze.who.plugins']['main_identifier'].remember(request.environ, {'repoze.who.userid':username}) 

     return {"status": True, "username": username} 
    else: 
     print("Could not authenticate") 
     return {"status": False, "username": None} 
+0

헤더를 추가하거나 자동으로 처리하지 않아야합니까? –

+0

모든 헤더를 덮어 쓰지 않아도됩니다. –