boz*_*doz 2 php authentication passwords jquery
我以前从未这样做过,而且我还没有在Google或StackOverflow上找到太多帮助.
这就是我所拥有的:密码输入:
<input type="text" placeholder="password" name="pass" id="password" />
Run Code Online (Sandbox Code Playgroud)
和一些jQuery来检查密码:
<script>
$('form').submit(function(){
input = $('#password').val();
var finish = $.post("pass.php", { request: "opensesame" }, function(data) {
return (input==data) ? true : false;
});
if(finish){
alert('sent');
}else{
alert('not sent');
}
return false;
});
</script>
Run Code Online (Sandbox Code Playgroud)
和密码分配php页面(pass.php):
<?php
if(isset($_POST['request'])&&$_POST['request']=="opensesame"){
echo 'graphics';
}
?>
Run Code Online (Sandbox Code Playgroud)
现在,我可以让它提醒"图形",但是我无法通过输入值来匹配数据以检查它是否是正确的密码.
我做错了什么,以这种方式验证密码的潜在危险是什么?
"AJAX"中的"A"代表异步.
调用后的代码$post
将在$post
函数内容之前执行.值finish
永远是一个jqXHR
对象,结果(input==data) ? true : false
将被忽略.
更清楚:
var finish = $.post("pass.php", { request: "opensesame" }, function(data) {
// THIS EXECUTES SECOND, and the return value is discarded
return (input==data) ? true : false;
});
// THIS EXECUTES FIRST, with finish set to a jqXHR object
if(finish){
...
Run Code Online (Sandbox Code Playgroud)
您需要重新考虑密码检查方法,或在$.post
调用之前添加以下内容来使用同步回发:
$.ajaxSetup({async:false});
Run Code Online (Sandbox Code Playgroud)
或者通过使用$.ajax
和传递async: false
:
jQuery.ajax({
type: 'POST',
url: "pass.php",
data: { request: "opensesame" },
success: function(result) { ... },
async: false
});
Run Code Online (Sandbox Code Playgroud)