【发布时间】:2012-01-20 14:56:40
【问题描述】:
我有我提交表单的 scriptA 和 siteB。脚本 B 是一个单独的脚本,不是我的,所以我不能更改它的任何设置。但是,ScriptA 是我的,所以我可以在下面发布该脚本。给定一个登录屏幕,用户输入他们的登录凭据,然后单击登录。在此之后,表单 POSTS 到表单的 action 属性中的 scriptB,然后表单使用 JQUERY POSTS 到 scriptA。 scriptB 我不在乎,我只需要将表单发布到它就可以了。被 POSTED 的 ScriptA 获取 POSTED 到它的凭据并执行 LDAP 绑定以查看凭据是否与 DB 中的凭据匹配,如果匹配,则将用户重定向到 www.examplesite.com,如果给定的凭据为 false,则用户被发送回登录屏幕,提示用户名和密码无效。
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
下面是我的 scriptA,如果我在没有 scriptB 的情况下发布到它,那么 scriptA 会按预期工作,但在这里我试图将这 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>
查询代码:
<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>
脚本A:
<?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;
}
?>
有人知道我如何在提交后在登录屏幕上进行重定向吗?
【问题讨论】:
-
你不能那样做。一旦您通过传统形式执行标准 POST,您的 Jquery 响应将不会返回。您需要先进行 JQuery 检查,然后在其成功响应中触发实际表单。你不能像那样同时开火。
标签: php javascript jquery forms ldap