2011-12-14 10 views
0

私は私のフォームを提出するscriptAとsiteBを持っています。スクリプトBは私のものではない別のスクリプトですので、設定を変更することはできません。しかし、ScriptAは私のものですので、以下のスクリプトを投稿することができます。ログイン画面が表示されると、ユーザーはログイン資格情報を入力し、ログインをクリックします。この後、フォームのアクション属性にあるscriptBへのフォームPOSTS、次にフォームにはJQUERY POSTSを使用したscriptAがあります。 scriptB私は心配していない、私はちょうどそれにフォームをPOSTする必要があります。 POSTEDされたScriptAはPOSTEDの資格情報を取得し、LDAPバインドを実行してDB内の資格情報と一致するかどうかを確認します。一致した場合、ユーザーはwww.examplesite.comにリダイレクトされます。無効なユーザー名とパスワードを示すログイン画面に戻ります。複数のフォーム提出と認証

ScriptBは私が望んでいない投稿にリダイレクトします。私はscriptBが何をしているか気にしません。私はそれに信任状をPOSTする必要があります。私はscriptAを気にします。一旦scriptAがユーザーをリダイレクトする正しい資格を取得すると、私はscriptBに変更を加えることはできませんので、私は何とかそのリダイレクトを無視しなければなりません。現在、何が起こる

:ログイン画面のユーザーのヒットで 1)は、資格情報 2を入力した後に提出)ScriptBはScriptBがwww.examplesiteするユーザーをリダイレクト)のScriptaはjQueryの 3を介しに投稿された、アクションatribute経由に掲載されています。何起こるべき

COM:ScriptBはアクションatribute経由に投稿された資格情報 2を入力した後に提出 1)ログイン画面のユーザーのヒットで)のScriptaが間違った資格情報を見つけた場合、のScripta)はjQueryの 3を介しに投稿されました、メッセージを無効にしてログイン画面にリダイレクトする必要があります ログイン。 4)ユーザーがログイン画面のユーザーで、正しい資格情報を入力してのScriptaが意図したように、その後のScriptaだけの作品、私はscriptBせず、それに投稿する場合、私のScripta、さwww.example2site.com以下

にユーザーをリダイレクトし、これらの資格情報を承認するが、ここで私はこれら2つを一緒にマージしようとしています。

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 CODE:

 <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> 

のScripta:私は上のリダイレクトを行うことができますどのように

<?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

私はAJAXを通して投稿しようとすると、スクリプトBが正しく機能するために必要なものは100%確信していませんが、何度も試してみましたが、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

関連する問題