Php 如何在应用程序内使用经过身份验证的用户数据

Php 如何在应用程序内使用经过身份验证的用户数据,php,angularjs,authentication,Php,Angularjs,Authentication,我有一个长期以来一直试图解决的问题。我读过关于PHP会话的课程,有人建议使用localstorage,但没有用 问题是: 我正在使用angularJS和PHP后端,我有两个视图,一个“login.html”,另一个“info.html”,两个控制器,一个用于登录功能,另一个用于选择用户数据。我设法完成了身份验证阶段,但对于第二步,我希望当用户进行身份验证时,它将重定向到other view info.html,在那里显示该用户的所有信息。如何存储登录函数中的数据并将其用于第二个controlle

我有一个长期以来一直试图解决的问题。我读过关于PHP会话的课程,有人建议使用localstorage,但没有用

问题是:

我正在使用angularJS和PHP后端,我有两个视图,一个“login.html”,另一个“info.html”,两个控制器,一个用于登录功能,另一个用于选择用户数据。我设法完成了身份验证阶段,但对于第二步,我希望当用户进行身份验证时,它将重定向到other view info.html,在那里显示该用户的所有信息。如何存储登录函数中的数据并将其用于第二个controllersecond web服务

login.php

infoCtrl:

info.php

我不知道如何获得用户身份验证数据,请问我该怎么做


提前感谢

您可以生成一个令牌并将其保存在服务器端数据库、$\u会话或cookie客户端

这样,每次执行php请求时,都可以检查会话/cookie

info.php

login.php

每次客户端登录时,令牌都应该是唯一和不同的

$token = md5($Email.time()."51395+81519851");
$query = "UPDATE client SET token = '".$token."' WHERE email = '".$Email."'";
mysqli_query($connect , $query);
因此,您的login.php可能看起来像这样

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

 $connect = mysqli_connect("localhost", "root", "", "test");  

 if(count($data) > 0)  

 { 

$Email=mysqli_real_escape_string($connect, $data->Email);
$password=mysqli_real_escape_string($connect, $data->password);

$query = 'SELECT * FROM `client` WHERE (EmailClient = "'.$Email.'" AND   password= "'.$password.'")';

$q = mysqli_query($connect , $query);

if(mysqli_num_rows($q) > 0 )
  { 
$token = md5($Email.time()."51395+81519851");
    $query = "UPDATE client SET token = '".$token."' WHERE email = '".$Email."'";
    mysqli_query($connect , $query);

       $_SESSION["logged_in"] = true; 
       $_SESSION["token"] = $token; 
       $_SESSION["naam"] = $Email; 
       $result['email'] =$Email;
       $resultstring=json_encode($result);
       $resultstring=str_replace("null", '""', $resultstring);
       echo $resultstring;
       exit;

  } 
       $result['code'] = 603;
       $result['message'] ='The username or password are incorrect!';


$resultstring = json_encode($result);
$resultstring = str_replace("null",'""',$resultstring);
echo $resultstring;
exit;
}

?>

我希望我没有错过任何东西

作为良好实践,您可以创建令牌:

if(mysqli_num_rows($q) > 0 )
   ...
   $result['token'] = ...Generate some random string...
   $result['token'] = $token;
   mysqli_query($connect , "INSERT INTO tokens set token = $token and email = $Email");
   ...
之后,将此令牌保存在cookie和info.php中,您可以执行以下操作:

...
$query = "SELECT email FROM tokens WHERE token = $_COOKIE['token']"
...

如果需要,您还可以通过电子邮件从客户表中获取信息

谢谢,我试图做你的建议,但我在info.php文件中得到这个错误,说token没有定义谢谢,我试图做你的建议,但我在info.php文件中得到这个错误,说token没有定义是的,你应该在mysql中创建tokens表。最简单的模式可以是这样的:创建表标记a TEXT NOT NULL、主键标记b TEXT NUT NULL;是的,我已经创建了它,但我不知道为什么我仍然有这个问题:info.php文件中的indefinded index token,我应该向这个文件添加一些东西吗?当我尝试从客户端简单地选择select*时,我得到了所有用户,但当我添加WHERE token=$\u COOKIE['token']时,我什么也得不到!1.正如我所写的,您应该在cookie中设置令牌。例如:setcookie'token',$token;2.您不应该尝试通过令牌从客户机中选择,因为我建议您添加新表。您可以在同一个表中添加令牌,但在这种情况下,您的令牌将仅在一个位置工作。在这种情况下,您可以进行两个查询:从tokens表中选择email,然后通过email从clients中选择,或者您可以使用join编写sql查询,例如从tokens t中选择*.c,clients c其中t.email=c.email和t.token=$\u COOKIE['token'],在这里您必须考虑sql注入。
$query = "SELECT * FROM client WHERE token = '".$_SESSION['token']."'";
$token = md5($Email.time()."51395+81519851");
$query = "UPDATE client SET token = '".$token."' WHERE email = '".$Email."'";
mysqli_query($connect , $query);
<?php  
session_start();
$data = json_decode(file_get_contents("php://input"));

 $connect = mysqli_connect("localhost", "root", "", "test");  

 if(count($data) > 0)  

 { 

$Email=mysqli_real_escape_string($connect, $data->Email);
$password=mysqli_real_escape_string($connect, $data->password);

$query = 'SELECT * FROM `client` WHERE (EmailClient = "'.$Email.'" AND   password= "'.$password.'")';

$q = mysqli_query($connect , $query);

if(mysqli_num_rows($q) > 0 )
  { 
$token = md5($Email.time()."51395+81519851");
    $query = "UPDATE client SET token = '".$token."' WHERE email = '".$Email."'";
    mysqli_query($connect , $query);

       $_SESSION["logged_in"] = true; 
       $_SESSION["token"] = $token; 
       $_SESSION["naam"] = $Email; 
       $result['email'] =$Email;
       $resultstring=json_encode($result);
       $resultstring=str_replace("null", '""', $resultstring);
       echo $resultstring;
       exit;

  } 
       $result['code'] = 603;
       $result['message'] ='The username or password are incorrect!';


$resultstring = json_encode($result);
$resultstring = str_replace("null",'""',$resultstring);
echo $resultstring;
exit;
}

?>
if(mysqli_num_rows($q) > 0 )
   ...
   $result['token'] = ...Generate some random string...
   $result['token'] = $token;
   mysqli_query($connect , "INSERT INTO tokens set token = $token and email = $Email");
   ...
...
$query = "SELECT email FROM tokens WHERE token = $_COOKIE['token']"
...