即使使用 AngularJS 和 PHP 的凭据不正确,登录仍然会指示

Posted

技术标签:

【中文标题】即使使用 AngularJS 和 PHP 的凭据不正确,登录仍然会指示【英文标题】:Login still directs even if incorrect credential with AngularJS and PHP 【发布时间】:2016-03-25 01:53:27 【问题描述】:

php 代码需要从表中获取数据,将其解码为 JSON,然后将其发送到 AngularJS。

如果登录凭据正确,Angular JS 会重定向。

但是,即使凭据不正确,用户仍然会被重定向(真正的语句总是通过)。

PHP 代码:

 <?php
    $data = json_decode(file_get_contents("php://input"));

    $username = $data->username;
    $password = $data->password;

     /*
   * Collect all Details from Angular HTTP Request.
   */ require_once("connection.php");
    //must read from table
    $connection = connectTomysql();
    //complete from here

    $query = "SELECT count(*) FROM tbl_admin WHERE username = '$username' AND password = '$password'";
    $result = mysqli_query($connection ,$query);
    $row = mysqli_fetch_row($result);
    $count = $row[0];

    if($count == 1)
    
        echo true;
    
    else 
    
        echo false;
    

?>

AngularJS 控制器:

app.controller('loginCtrl', function ($scope, $http, $location) 
   /*
    * This method will be called on click event of button.
    * Here we will read the email and password value and call our PHP file.
    */
    $scope.checkCredentials = function (credentials) 
        $http.post('model/getAdmin.php',credentials).success(function(data)
            console.log("true");
            $location.path("/memberList");
      )
      .error(function(err)
          $log.error(err);
          console.log("false");
      );
    
);

html 表单代码

<form class="form-group" id="customForms" ng-controller="loginCtrl">
        <label> Username </label> 
        <input id="customFormsInput" class="form-control" ng-model="credentials.username" type="text" placeholder="Username goes here" required/>
        <br> 
        <label> Password </label>
        <input id="customFormsInput" class="form-control" ng-model="credentials.password" type="password" placeholder="Password goes here" required/>
        <br> <br>
        <button class="btn btn-primary" type="submit" ng-click="checkCredentials(credentials)"> Submit </button>
        <br>
            responseMessage
            <!-- Shows message depending on login type -->
    </form>

【问题讨论】:

尝试console.log(data) 并查看服务器响应。 我已经从 php 端更改了 echo,现在 console.log(data) 向我展示了从 PHP 端验证是好的。 (返回 PHP True 和 PHP False)。然而,控制只是通过真实的陈述而已。 $http.post 解析即使服务器以false 响应。取而代之的是,服务器可以用 JSON 格式的一些信息进行响应,这样您的应用程序就知道为什么检查凭据失败了。 换句话说:你需要在你的成功函数中添加一个检查。喜欢:.success(function(data) if (data === "PHP True") $location.path ... 工作谢谢!!! @iWörk 【参考方案1】:

您必须将if-else 条件添加到您的success 回调,因为即使您从PHP 代码发送false,您也总是发送200 响应:

$scope.checkCredentials = function (credentials) 
  $http.post('model/getAdmin.php',credentials).success(function(data)
        console.log("true", data);
        if (data == true)     // Or in whatever form you are receiving true/false
            $location.path("/memberList");
         else 
            $log.error(err);
            console.log("false");
        
  )

如果您想让旧代码正常工作,即在 Angular 中使用 successerror 回调,那么您需要从您的 PHP 代码中发送非 200 响应代码以及 false,例如:

if($count == 1)

    echo true;

else 

    http_response_code(406);       // not acceptable response code
    echo false;

(推荐第二种方案)

我从未使用过 PHP,因此请确保 http_response_code(406); 写得正确。

【讨论】:

以上是关于即使使用 AngularJS 和 PHP 的凭据不正确,登录仍然会指示的主要内容,如果未能解决你的问题,请参考以下文章

Spring security/hibernate:即使是正确的凭据也不正确?

Spring Security - 即使凭据正确,身份验证也不起作用

AngularJS $http:当凭据标志为真时,不能在 Access-Control-Allow-Origin 中使用通配符

Strapi 在生产中给我数据库错误,即使我使用的是正确的凭据

我正在使用 php 通过 PHP 和客户端凭据流连接到 spotify 的 API

即使使用实时 api 凭据,Paypal Express 结帐错误