我有提交表单的scriptA和siteB。脚本B是一个单独的脚本,不是我的,所以我不能改变它的任何设置..但是,ScriptA是我的,所以我可以在下面发布该脚本。给定登录屏幕,用户输入其登录凭据然后单击登录。在此之后,表单POSTS到scriptB,它在表单的action属性中,然后表单使用JQUERY POSTS到scriptA。 scriptB我不在乎,我只需要将表单发布到它就可以了。 POSTA的ScriptA将凭据POSTED传递给它并执行LDAP绑定以查看凭据是否与数据库中的凭据匹配,如果匹配,则用户被重定向到www.examplesite.com,如果给定的凭据为假,则用户被发送回登录屏幕,说明用户名和密码无效。
ScriptB重定向提交,我不想要,我甚至不关心scriptB做什么,我只需要将凭证POST给它。我关心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的情况下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 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 :(得分:0)
为什么不通过ajax发布到脚本B,并使用event.preventDefault()
来阻止按钮执行标准表单帖子?
答案 1 :(得分:0)
我认为您需要停止提交表单的提交按钮,为此添加“return false;”在提交回调函数结束时如下:
error: function(xhr, status, err) {
alert(status + ": " + err);
}
});
return false;
});
});
然后,在成功回调中执行您需要的任何操作,无论是将其提交到其他URL还是其他内容。这可能有效:
success: function(data, status, xhr){
$('#form').unbind('submit');
$('#form').submit();
},