2011-12-14 2 views
0

양식을 제출하는 scriptA와 siteB가 있습니다. 스크립트 B는 내 것이 아닌 별도의 스크립트이므로 설정을 변경할 수 없습니다. 그러나 ScriptA는 내 것이므로 아래 스크립트를 게시 할 수 있습니다. 로그인 화면이 주어지면 사용자는 로그인 자격 증명을 입력 한 다음 로그인을 클릭합니다. 이 후 양식의 작업 속성에있는 scriptB에 POSTS 양식을 입력 한 다음 JQUERY POSTS를 사용하여 양식을 scriptA에 지정합니다. scriptB 나는 그것에 대해 신경 쓰지 않고, 나는 그것과 그것에 대한 폼을 POST 할 필요가있다. 게시 된 ScriptA는 게시 된 자격 증명을 가져 와서 DB에있는 자격 증명과 일치하는지 확인하기 위해 LDAP 바인딩을 수행합니다. 일치하는 경우 사용자가 www.examplesite.com으로 리디렉션되고 주어진 자격 증명이 false 인 경우 user 잘못된 사용자 이름과 암호를 말하는 로그인 화면으로 다시 전송됩니다.인증을 통한 양식 제출

ScriptB는 내가 원하지 않는 제출물을 리디렉션합니다. scriptB가하는 일에 신경 쓰지 않아도됩니다. POST에 자격 증명을 게시해야합니다. 나는 scriptA에 관심이있다. 일단 scriptA가 사용자를 리디렉션해야하는 적절한 자격 증명을 얻으면. scriptB에 대한 변경을 할 수 없기 때문에 리디렉션을 어떻게 든 무시해야합니다. 현재 어떻게됩니까

: 1) 로그인 화면 사용자 안타는 ScriptB는 액션 atribute를 통해 게시됩니다 입력 자격 증명 2) 후, 스크립은 ScriptB는 www.examplesite 할 수있는 사용자를 리디렉션) JQUERY (3)를 통해 게시됩니다 제출합니다. COM

이 발생한다 무엇

: 스크립 잘못된 자격 증명을 발견하면 1) 로그인 화면 사용자 안타에 제출할 ScriptB는 액션 atribute를 통해 게시됩니다 입력 자격 증명 2) 후에는, 스크립은 JQUERY 3)를 통해 게시됩니다 , 메시지가 잘못된 로그인 화면으로 다시 리디렉션해야합니다. 로그인. 4) 사용자가 로그인 화면에서 올바른 자격 증명을 입력하고 scriptA가 이러한 자격 증명을 승인하면 사용자를 www.example2site.com으로 리디렉션합니다.

아래는 내 scriptA입니다. 내가 scriptB없이 POST하면 scriptA는 의도 한대로 작동하지만 여기에 나는이 두 가지를 하나로 합치려고 노력하고있다.

scriptA는 기본적으로 웹 사이트 로그인 인증이며 LDAP 바인드를 통해 인증됩니다.

<form action="http://servicedesk.site.com/j_security_check" method=post id="form" name="Auth" class="appnitro"> 
     <div class="form_description"> 
      <h2>Login</h2> 

     </div> 


      <ul > 

        <li id="li_1" > 
     <label class="description" for="element_1">Username </label> 
     <div> 
      <input id="element_1" name="j_username" class="element text medium" type="text" maxlength="255" value=""/> 
     </div> 
     </li>  <li id="li_2" > 
     <label class="description" for="element_2">Password </label> 
     <div> 
      <input id="element_2" name="j_password" class="element text medium" type="password" maxlength="255" value=""/> 
     </div> 
     </li> 

        <li class="buttons"> 


       <input id="saveForm" class="button_text" type="submit" name="submit" value="Log In" /> 
     </li> 
      </ul> 

    </form> 

jQuery 코드 :

 <script language="JavaScript" type="text/JavaScript"> 
$(document).ready(function(){ 

    $('#form').submit(function(){ 

    $.ajax({ 
     type: 'POST', 
     async: true, 
     url: "https://noc.sde.site.com/okhawaja/Login/formLanding/authenticate.php", 
     data: $(this).serialize(), 
     success: function(data, status, xhr){ 

     }, 
     error: function(xhr, status, err) { 
     alert(status + ": " + err); 
     } 
    }); 

    }); 



}); 


     </script> 

스크립 : I가 리디렉션을 수행 할 수있는 방법을

<?php 
session_start(); 

if(isset($_POST['j_username']) && isset($_POST['j_password'])) 
{ 
    //LDAP stuff here. 
    $username = trim($_POST['j_username']); 
    $password = trim($_POST['j_password']); 

    echo("Authenticating..."); 
    $ds = ldap_connect('ldap://ldap:port'); 

     ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); 

    //Can't connect to LDAP. 
    if(!ds) 
    { 

$_SESSION['rdr']="Invalid Login. Try Again."; 


     header("Location: https://noc.sde.site.com/okhawaja/Login/formLanding/login.php"); 


     exit; 
    } 

    //Connection made -- bind anonymously and get dn for username. 
    $bind = @ldap_bind($ds); 

    //Check to make sure we're bound. 
    if(!bind) 
    { 
$_SESSION['rdr']="Invalid Login. Try Again."; 



     header("Location: https://noc.sde.site.com/okhawaja/Login/formLanding/login.php"); 

     exit; 
    } 

    $search = ldap_search($ds, "ou=People,DC=sde,DC=site,DC=com", "uid=$username"); 

    //Make sure only ONE result was returned -- if not, they might've thrown a * into the username. Bad user! 
    if(ldap_count_entries($ds,$search) != 1) 
    { 


$_SESSION['rdr']="Invalid Login. Try Again."; 



     header("Location: https://noc.sde.site.com/okhawaja/Login/formLanding/login.php"); 

     redirect(_WEBROOT_ . "/try1b.php"); 

     exit; 
    } 

    $info = ldap_get_entries($ds, $search); 

    //Now, try to rebind with their full dn and password. 
    $bind = @ldap_bind($ds, $info[0][dn], $password); 
    if(!$bind || !isset($bind)) 
    { 


$_SESSION['rdr']="Invalid Login. Try Again."; 



header("Location: https://noc.sde.site.com/okhawaja/Login/formLanding/login.php"); 

     redirect(_WEBROOT_ . "/try1b.php"); 

     exit; 
    } 

    //Now verify the previous search using their credentials. 
    $search = ldap_search($ds, "ou=People,DC=sde,DC=rogersdigitalmedia,DC=com", "uid=$username"); 

    $info = ldap_get_entries($ds, $search); 
    if($username == $info[0][uid][0]) 
    { 
     $_SESSION['username'] = $username; 
     $_SESSION['fullname'] = $info[0][cn][0]; 
     $_SESSION['email'] = $info[0][mail][0]; 
     $_SESSION['phone'] = $info[0][telephonenumber][0]; 
header("Location: https://noc.sde.site.com/okhawaja/service_desk_portal/index.php"); 

     exit; 
    } 
    else 
    { 


$_SESSION['rdr']="Invalid Login. Try Again."; 


header("Location: https://noc.sde.site.com/okhawaja/Login/formLanding/login.php"); 

     redirect(_WEBROOT_ . "/try1b.php"); 

     exit; 
    } 
    ldap_close($ds); 
    exit; 
} 
?> 

아는 사람을 모두 스크립트에 제출

근무 로그인 화면 코드 제출시 로그인 화면?

+0

그렇게 할 수 없습니다.전통적인 양식을 통해 표준 POST를 수행하면 Jquery 응답이 반환되지 않습니다. 먼저 JQuery 검사를 수행 한 다음 성공 응답에서 실제 양식을 실행 취소해야한다. 그렇게하면 같은 시간에 두 가지를 모두 켤 수 없습니다. –

답변

0

그냥 Ajax를 통해 스크립트 B에 게시하고 event.preventDefault()을 사용하여 표준 양식 게시를 수행하지 못하게하는 것이 어떨까요?

+0

im는 scriptB가 제대로 작동하려면 요구 사항이 100 % 확실하지 않지만 여러 번 시도했지만 AJAX를 통해 POST하려고하면 scriptB에서 빈 오류가 발생합니다. – Bulvak

+0

당신은 운이 없을 수도 있습니다. 표준 형식으로 제출할 때 스크립트 B 리디렉션을 방지 할 수 있는지 확실하지 않습니다. – maxedison

0

양식 제출을 위해 제출 버튼을 중지해야한다고 생각합니다. 이렇게하려면 "return false;"를 추가하십시오. 그래서 같이 제출 콜백 함수의 끝에 :

error: function(xhr, status, err) { 
     alert(status + ": " + err); 
     } 
    }); 

    return false; 
    }); 

}); 

그런 성공 콜백에서 당신이인지 여부를 다른 URL 또는 뭔가에에 제출해야 무엇이든. 작동 여부 :

success: function(data, status, xhr){ 
    $('#form').unbind('submit'); 
    $('#form').submit(); 
}, 
+0

scriptA의 php 코드는 www.examplesite2.com에 성공적으로 제출할 때 리디렉션하거나 리디렉션 실패로 다시 로그인 화면으로 리디렉션하는 것과 같은 처리를합니다. – Bulvak

+0

내가 말했던 내용을 제출 했으므로 제출시 scriptB의 리디렉션을 사용합니다. 리디렉션이 작동합니까? – Bulvak