【问题标题】:How to select authenticated user data with PHP and AngularJS如何使用 PHP 和 AngularJS 选择经过身份验证的用户数据
【发布时间】:2017-07-28 19:33:09
【问题描述】:

我有一个问题我已经尝试解决了很长时间。我已经阅读了有关 PHP 会话的课程,并提出了使用 localstorage 的建议,但无济于事

问题:

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

login.php

<?php  
session_start();
$_SESSION['token'] = true;
$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);
$mdp=mysqli_real_escape_string($connect, $data->mdp);

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

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

if(mysqli_num_rows($q) > 0 )
  { 
       $token = md5($Email.time()."51395+81519851");
       $query = "UPDATE client SET token = '".$token."' WHERE EmailClient = '".$Email."'";
       mysqli_query($connect , $query);
       $_SESSION["logged_in"] = true; 
       $_SESSION["token"] = $token; 
       $_SESSION["Email"] = $Email; 
       $result['token'] = $token;           
       $resultstring=json_encode($result);
       $resultstring=str_replace("null", '""', $resultstring);
       echo $resultstring;
       exit;

  }

    ?>

loginCtrl

app.controller('loginCtrl', function($scope, $location,$state,$http,$window){

    $scope.submit = function()
    {
        data = {
            'Email' : $scope.Email,
            'password' : $scope.password
    };

        $http.post('http://localhost/deb/login.php', data)
        .success(function(data, status, headers, config,result)
        {
            console.log(data);
            $state.go('info');

             }
        })
        .error(function(data, status, headers, config, result)
        {      
            console.log('error');   
        });
    }

});

信息控制:

app.controller('infoCtrl', function($scope, $http,$state,$filter){

    $scope.loadColis = function(){ 
              $http.get("http://localhost/deb/info.php")  
           .success(function(data){  
                $scope.names = data;  
           });
      }

info.php

<?php  
session_start();
 $connect = mysqli_connect("localhost", "root", "", "test");  

 $output = array();  
 $query = "SELECT Name,Adresse FROM client WHERE token = '".$_SESSION['token']."'";
 $result = mysqli_query($connect, $query);  
 if(mysqli_num_rows($result) > 0)  
 {  
      while($row = mysqli_fetch_array($result))  
      {  
           $output[] = $row;  
      }  
      echo json_encode($output);  
 }  

 ?>

我不知道如何获取用户认证数据,请问我该怎么做?

提前致谢

【问题讨论】:

  • 你好。请查看bobby-tables.com 并了解 SQL 注入以及如何防止它们。实际上你的代码根本不安全。
  • 使用会话存储或 cookie 在整个应用程序中访问您经过身份验证的数据。
  • @Indhu,你能告诉我我该怎么做吗!
  • @Twinfriends 谢谢你,我正在咨询你的建议,我会处理这个。谢谢

标签: php angularjs authentication


【解决方案1】:

在登录控制器中:

app.controller('loginCtrl', function($scope, $location,$state,$http,$window, $cookies){

    $scope.submit = function()
    {
        data = {
            'Email' : $scope.Email,
            'password' : $scope.password
    };

        $http.post('http://localhost/deb/login.php', data)
        .success(function(data, status, headers, config,result)
        {
            console.log(data);
            $cookies.putObject('AuthenticateData', data);
            $state.go('info');

             }
        })
        .error(function(data, status, headers, config, result)
        {      
            console.log('error');   
        });
    }

});

在信息控制器中:

app.controller('infoCtrl', function($scope, $http,$state,$filter, $cookies){
//use something like this
   var authenticateData =  cookies.getObject("AuthenticateData");
});

这只是一个展示 cookie 工作原理的示例。您可以在其中解决问题。

【讨论】:

  • 谢谢,我希望它能帮助我解决我的问题。谢谢
猜你喜欢
  • 2018-05-12
  • 2017-09-11
  • 2017-11-29
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2020-11-15
  • 2016-01-17
  • 2016-11-30
相关资源
最近更新 更多