как я могу AJAX сформировать аутентификацию? - PullRequest
1 голос
/ 16 ноября 2011

У меня есть экран входа в систему с именем пользователя и паролем, которые проверяются через php-скрипт.как только пользователь вводит свое имя пользователя и пароль и нажимает кнопку отправить.authenticate.php выполняет привязку LDAP, и если учетные данные пользователя являются действительными, они перенаправляются, чтобы сказать www.siteA.com, если учетные данные ложные, выдается erorr с сообщением «Неверный вход в систему, проверка подлинности не удалась. Я хотел бы сделать этот AJAX таккогда пользователь нажимает «отправить», прямо на этой странице он сообщает пользователю, введены ли они действительные или недействительные логин.

Ниже мой код:

Для формы входа:

<form action=authenticate.php method=post 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="login" 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="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>

Мой LDAP Bind, Authenticate.php:

<?php
    session_start();

    if( isset($_POST['login']) && isset($_POST['password']) )
    {
        //LDAP stuff here.
        $username = trim($_POST['login']);
        $password = trim($_POST['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 )
        {
            echo "Error in contacting the LDAP server -- contact ";
            echo "technical services!  (Debug 1)";

            exit;
        }

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

        //Check to make sure we're bound.
        if( !bind )
        {
            echo "Anonymous bind to LDAP FAILED.  Contact Tech Services! (Debug 2)";

            exit;
        }

        $search = ldap_search($ds, "ou=People,DC=keler,DC=medioa,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 )
        {
            echo "Error processing username -- please try to login again. (Debug 3)";
            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))
        {
            echo "Login failed -- please try again. (Debug 4)";
            redirect(_WEBROOT_ . "/try1b.php");

            exit;
        }

        //Now verify the previous search using their credentials.
        $search = ldap_search($ds, "ou=People,DC=keler,DC=medioa,DC=com", "uid=$username");
        //if the user's login is legit then redirect to the siteA    
        $info = ldap_get_entries($ds, $search);
        if( $username == $info[0][uid][0] )
        {
            $_SESSION['username'] = $username;
            $_SESSION['fullname'] = $info[0][cn][0]; 
            header( "Location: www.siteA.com" );

            exit;
        }
        else
        {
            echo "Error. Access Denied";
            redirect(_WEBROOT_ . "/try1b.php");

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

1 Ответ

2 голосов
/ 16 ноября 2011

нет необходимости вставлять все это.

отправьте форму, используя Ajax, и серверный сценарий вернет сообщение о состоянии и об ошибке.

, если состояние указывает, что вход выполнен успешно, выполните перенаправление, используя JavaScript.

, если состояние указывает на сбой входа в систему, предупредите об ошибке.

...