【问题标题】:Can't validate username and password from mongodb using php无法使用 php 从 mongodb 验证用户名和密码
【发布时间】:2016-04-20 09:27:35
【问题描述】:

我想验证来自 mongodb 的用户名和密码。如果用户名和密码与我的 php 代码匹配,它应该让我进入管理页面。 角度验证适用于用户名和密码,但没有 mongodb 数据库。 你能告诉我哪里出错了吗?

index.php

 <?php 
 include('login.php'); // Includes Login Script
 ?> 
 <!doctype html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>LoginIN</title>
 <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
 <script type="text/javascript" src="js/angular.min.js"></script>
 <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">

  <link href="styles/bootstrap.min.css" rel="stylesheet">
  <link href="styles/signin.css" rel="stylesheet">
  <script src="js/app.js"></script> 


 </head> 
 <body ng-app="postAngular" ng-controller="PostController as postCtrl">

 <div id="wrapper">
  <header id="top">
  <center><h1>Leave Reporting System</h1></center>
    <div class="container">

  <form class="form-signin" ng-submit="postCtrl.postForm()">
   <ul>
  <?php if(isset($errorMessage)):?>

   <?php endif ?>

   <h2 class="form-signin-heading">Please sign in</h2>

    <input type="text" name="username" class="form-control" placeholder="Email address" ng-model="postCtrl.inputData.username" required >


     <input type="password" name="password" class="form-control" placeholder="Password" required ng-model="postCtrl.inputData.password">

      <div class="checkbox">
     <label>
     <input type="checkbox" value="remember" name ="remember">Remember me
     </label><br>
     </div>

   <div  role="alert" ng-show="errorMsg">{{errorMsg}}</div>
    <input name="login" button class="btn btn-lg btn-primary btn-block"  type ="submit" value=" Log in">

       <br>
       <a href="">Forgot your password?</a> 
     </ul>
 </form>

    </div>
  </body>
   </html>

登录.php

<?php

$errorMessage ="";
//session_start();

if(isset($_POST['login'])){
  $usr = $_POST['username']; 
  $pass = $_POST['password'];

  $conn = new MongoClient();

  $db = $conn->lrs;
  $col = $db->Login;

  $query = array(
    'username' => $usr,
    'password' => md5($pass)
  );

  $cursor = $col->findOne($query);

  foreach($cursor as $obj){
    $foundusr = $obj['username'];
    $foundpass = $obj['password'];

    if($obj['username']== $usr && $obj['password']= $pass){
      header('location: admin.php');
    } else {
      $errorMessage = "<h3>Username/password did not match.</h3>";
    }
  }

}

?>

【问题讨论】:

    标签: php angularjs mongodb


    【解决方案1】:

    这里:

    $query = array(
      'username' => $usr,
      'password' => md5($pass)
    );
    

    您正在使用 md5 查询密码,但您将其存储为纯文本!

    md5 也不是一个很好的安全哈希来存储密码。 从 PHP 5.5 开始,您应该使用 password_hash():http://php.net/manual/en/function.password-hash.php

    【讨论】:

    • 我也试过那个,但还是不行。问题是验证,因为不使用表单操作,它没有使用用户名和密码进行验证,并且没有导航也是 admin.php 工作
    • $cursor 有什么吗?我不认为它会匹配任何东西。假设您在“用户名”字段中有一些限制,为什么不只通过用户名进行查询,然后,如果用户存在,您将收到的密码散列并与您存储的密码进行比较。
    • 另一件事你应该知道你使用的 MongoDB 驱动程序已弃用 php.net/manual/en/class.mongoclient.php 并且它与 PHP7 不兼容
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多