отправка нескольких форм с аутентификацией - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть scriptA и siteB, на которые я отправляю свою форму. Скрипт B - это отдельный скрипт, который не принадлежит мне, поэтому я не могу изменить какие-либо его настройки. Однако ScriptA - мой, поэтому я могу опубликовать этот скрипт ниже. На экране входа в систему пользователь вводит свои учетные данные, а затем нажимает кнопку входа. После этого форма POSTS to scriptB находится в атрибуте action формы, затем форма использует JQUERY POSTS для scriptA. scriptB Меня не волнует, мне просто нужно отправить форму к нему, и это все. ScriptA, для которого POSTED принимает учетные данные POSTED, и выполняет привязку LDAP, чтобы проверить, совпадают ли учетные данные с данными в БД, если они совпадают, пользователь перенаправляется на www.examplesite.com, если указанные учетные данные ложные, то отправляется обратно на экран входа с неверным именем пользователя и паролем.

ScriptB перенаправляет при отправке, которую я не хочу, мне даже не важно, что делает scriptB, мне просто нужно отправить свои учетные данные. Я забочусь о scriptA, как только scriptA получает правильные учетные данные, он должен перенаправить пользователя. Я не могу внести изменения в scriptB, поэтому мне нужно как-то игнорировать его перенаправление.

Что происходит в настоящее время: 1) На экране входа в систему пользователь нажимает кнопку Отправить после ввода учетных данных. 2) ScriptB размещается через атрибут действия, ScriptA размещается через JQUERY 3) ScriptB перенаправляет пользователя на www.examplesite.com

Что должно произойти : 1) На экране входа в систему пользователь нажимает кнопку Отправить после ввода учетных данных. 2) ScriptB размещается через атрибут действия, ScriptA размещается через JQUERY 3) Если scriptA обнаружит неверные учетные данные, он должен перенаправить обратно на экран входа в систему с сообщением о неверном входе в систему. 4) как только пользователь введет правильные учетные данные на экране входа в систему, и scriptA утвердит эти учетные данные, перенаправьте пользователя на www.example2site.com

Ниже приведен мой скриптA, если я отправляю его без скрипта B, тогда скриптA работает так, как задумано, но здесь я пытаюсь объединить эти 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:

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

Кто-нибудь знает, как я могу сделать перенаправление на экране входа в систему после отправки?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Я думаю, вам нужно остановить кнопку отправки для отправки формы, для этого добавьте "return false;"в конце функции обратного вызова submit, например, так:

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

    return false;
  });

});

Затем при успешном обратном вызове сделайте все, что вам нужно, будь то отправить его на другой URL или что-то еще.Это может работать:

success: function(data, status, xhr){
    $('#form').unbind('submit');
    $('#form').submit();
},
0 голосов
/ 15 декабря 2011

Почему бы просто не опубликовать в сценарий B через ajax и использовать event.preventDefault(), чтобы кнопка не выполняла стандартную форму отправки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...