Angularjs 如何使用slimphp验证登录

Angularjs 如何使用slimphp验证登录,angularjs,authentication,pdo,login,slim,Angularjs,Authentication,Pdo,Login,Slim,我正在使用AngularJS(前端)、Slim框架(后端)、PHP和MySQL。我试图用数据库存储的值验证用户电子邮件和密码,但我能够用不正确的电子邮件和密码登录。我看不出我的问题在哪里。请帮帮我!这是我的密码 login.html <form novalidate name="SigninForm" id="add-new-form" method="post" action=""> <div class="form-group"> <label for="f

我正在使用AngularJS(前端)、Slim框架(后端)、PHP和MySQL。我试图用数据库存储的值验证用户电子邮件和密码,但我能够用不正确的电子邮件和密码登录。我看不出我的问题在哪里。请帮帮我!这是我的密码

login.html

<form novalidate name="SigninForm" id="add-new-form" method="post" action=""> <div class="form-group">
  <label for="first_name">Email:</label>
  <input class="form-control" type="text" ng-model="user.email" required />
</div>

<div class="form-group">
  <label for="address">Password:</label>
  <input class="form-control" type="text" ng-model="user.password" />
</div>
   <button class="btn btn-primary" ng-disabled="SigninForm .$invalid || isUnchanged(user)" id="login" ng-click="signin(user)">Login!</button></form>
index.php

<?php

require 'Slim/Slim.php';

$app = new Slim();

$app->post('/login_user', 'login');

$app->run();


function login()                                                    
{
    $request = Slim::getInstance()->request();
    $user = json_decode($request->getBody());
    $email= $user->email;
    $password= $user->password;

if(!empty($email)&&!empty($password))
    {
        $sql="SELECT name, email FROM user WHERE email='$email' and password='$password'";
        $db = getConnection();
    try {
        $result=$db->query($sql); 

                if (!$result) { // add this check.
                      die('Invalid query: ' . mysql_error());
                }
        $row["user"]= $result->fetchAll(PDO::FETCH_OBJ);
        $db=null;
        echo json_encode($row);

    } catch(PDOException $e) 
    {
        error_log($e->getMessage(), 3, '/var/tmp/php.log');
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
    }
}

function getConnection() {
    $dbhost="127.0.0.1";
    $dbuser="root";
    $dbpass="";
    $dbname="TQA";
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}

?>

问题在于,无论用户输入如何,您都会返回一个成功的结果。Apache、nginx和PHP的内置web服务器返回一个默认的HTTP代码200,它们可以毫无问题地处理请求。因为您的路由没有显式失败,所以对于您的服务器来说,请求/响应似乎一切正常

例如,如果用户提交表单时电子邮件或密码为空,则应返回代码为400(错误请求)的响应。此外,如果在数据库中找不到与给定电子邮件和密码匹配的用户,则可能会返回代码401(未经授权的

有关HTTP状态代码的更多信息,请参阅

使用正确的状态代码时,
登录
功能可能如下所示:

函数登录()
{
$app=Slim::getInstance();
$request=$app->request();
$user=json_decode($request->getBody());
$email=$user->email;
$password=$user->password;
if(空($email)| |空($password)){
$error='需要电子邮件和密码';
//错误的请求
返回jsonResponse($error,400);
}
$sql=“选择名称,来自用户的电子邮件”
“其中email='$email'和password='$password'”;
$db=getConnection();
$row=array();
试一试{
$result=$db->query($sql);
如果(!$result){
$error='无效查询:'.mysql_error();
//内部服务器错误
返回jsonResponse($error,500);
}
$user=$result->fetchAll(PDO::FETCH_OBJ);
if(空($user)){
//未经授权
返回jsonResponse($error,401);
}
$row[“用户”]=$user;
$db=null;
}捕获(PDO$e){
错误日志($e->getMessage(),3,'/var/tmp/php.log');
$error=array('error'=>array('text'=>$e->getMessage());
//内部服务器错误
返回jsonResponse($error,500);
}
//好的,默认值是200
返回jsonResponse($row);
}
在上面的代码中,我使用以下函数来避免代码重复。它不是Slim或PHP的一部分,因此如果您想使用它,请将其添加到您的项目中

函数jsonResponse($data,$code=200) { $app=Slim::getInstance(); $app->response->setStatus($code); $app->response->headers->set( “内容类型”, 'application/json;charset=utf-8' ); 返回$app->response->setBody(json_encode($data)); }
嘿!下面的答案对你有帮助吗?如果是,请接受。它可以帮助其他人寻找类似问题的解决方案。
<?php

require 'Slim/Slim.php';

$app = new Slim();

$app->post('/login_user', 'login');

$app->run();


function login()                                                    
{
    $request = Slim::getInstance()->request();
    $user = json_decode($request->getBody());
    $email= $user->email;
    $password= $user->password;

if(!empty($email)&&!empty($password))
    {
        $sql="SELECT name, email FROM user WHERE email='$email' and password='$password'";
        $db = getConnection();
    try {
        $result=$db->query($sql); 

                if (!$result) { // add this check.
                      die('Invalid query: ' . mysql_error());
                }
        $row["user"]= $result->fetchAll(PDO::FETCH_OBJ);
        $db=null;
        echo json_encode($row);

    } catch(PDOException $e) 
    {
        error_log($e->getMessage(), 3, '/var/tmp/php.log');
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
    }
}

function getConnection() {
    $dbhost="127.0.0.1";
    $dbuser="root";
    $dbpass="";
    $dbname="TQA";
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}

?>