2017-06-29 56 views
0

我有一個問題,我一直在努力解決很長時間。我看了一下PHP會話課程,我建議使用localStorage的,但無濟於事如何在應用程序內使用已驗證的用戶數據

問題:

林與angularJS和PHP後臺的工作,我有2次,一個人的login.html '和另一個'info.html',2個控制器(一個用於登錄功能,另一個用於選擇用戶的數據)。我設法進行了身份驗證階段,但對於第二步,我希望當用戶進行身份驗證時,它將被重定向到其他視圖(info.html),其中將顯示此用戶的所有信息。如何從登錄功能,存儲數據,並在第二控制器使用它(第二Web服務)

的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) 
    { 
     $_SESSION["logged_in"] = true; 
     $_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; 
} 

?> 

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'); 
     }); 
    } 

}); 

infoCtrl:

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的

... 
$query = "SELECT * FROM client where ???" ; 
.... 

我不知道如何獲取用戶認證的數據,我該怎麼辦嗎?

在此先感謝

回答

0

您可以生成一個「令牌」,並將其保存在服務器端(數據庫)和$ _SESSION或在Cookie(客戶端)

這樣,每次你做一個PHP請求,你可以檢查會話/ cookie。

info.php的

$query = "SELECT * FROM client WHERE token = '".$_SESSION['token']."'"; 

的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; 
} 

?> 

我希望我沒有錯過任何東西。 :)

+0

謝謝,我試圖做你的建議,但我在info.php文件中得到這個錯誤,說這個令牌不是定義的 – SalamSalam

0

作爲很好的做法,您可以創建令牌:

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']" 
... 

如果您需要,也可以通過電子郵件從客戶表中獲取信息。

+0

謝謝,我試圖做你的建議,但我得到這個信息的錯誤.php文件,說這個令牌沒有定義 – SalamSalam

+0

是的,你應該在mysql中創建令牌表。最簡單的模式可以是這樣的: CREATE TABLE token(a TEXT NOT NULL, PRIMARY KEY(token),b TEXT NUT NULL); – LucemFerre

+0

是的,我已經創建了它,但我不知道爲什麼我仍然有這個問題:info.php文件中的不確定索引標記,我應該添加一些東西到這個文件? – SalamSalam

相關問題