如何用jquery和php验证密码?

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)

现在,我可以让它提醒"图形",但是我无法通过输入值来匹配数据以检查它是否是正确的密码.

我做错了什么,以这种方式验证密码的潜在危险是什么?

mea*_*gar 5

"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)