如何在身份验证后重定向到其他视图

时间:2017-05-31 10:53:44

标签: php angularjs mysqli ionic-framework

我正在使用AngularJS和PHP后端在我的应用程序中进行身份验证,在控制器中我放了一个console.log来查看身份验证是否正常工作,当密码和用户名不正确时,我发现一切正常我收到错误消息,当它们出错时,我发现它们是不正确的,但在这种情况下,我希望被重定向到其他视图,当我放置时:window.location.href ='#/ admin&#39 ;;它在两种情况下将我重定向到管理员视图,而不仅仅是在它们是正确的时候。你可以帮帮我吗?

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

    $scope.submit = function()
        {
          data = {
            'NomClient' : $scope.NomClient,
            'mdp' : $scope.mdp
        };

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

            window.location.href = '#/admin';
        })
        .error(function(data, status, headers, config, rsult)
        {    
        console.log('error');

        });
    }

});

的login.php

 <?php  

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

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


 if(count($data) > 0)  
 { 
$NomClient=mysqli_real_escape_string($connect, $data->NomClient);
$mdp=mysqli_real_escape_string($connect, $data->mdp);


$query = 'SELECT * FROM `client` WHERE NomClient = "'.$NomClient.'" AND   mdp= "'.$mdp.'"';

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

if(mysqli_num_rows($q) > 0 )
  { 
       $_SESSION["logged_in"] = true; 
       $_SESSION["naam"] = $NomClient; 
       $result['code'] = 200;
       $result['message'] ='Logged In';
  }
  else
  {

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

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

提前致谢

2 个答案:

答案 0 :(得分:0)

而不是window.location.href使用

$state.go(state_name_of_#/admin)

请参阅此$state.go()

无论身份验证如何,成功函数始终在有响应时调用。

在PHP文件中,仅在验证成功时返回true响应,否则返回false到前端

然后检查您将找到返回值的responseresponse.responseMessage

.success(function(reponse){
    var data = JSON.parse(reponse);
    if(data.code == 200){
       $state.go(enter_your_state_name_of_admin); // example "admin"
    } else {
       // do nothing
    }
})

答案 1 :(得分:0)

您可以使用$state.go()作为: $state.go('admin');

'admin必须是您的州名。'

修改

.success中的代码将在您没有任何错误的情况下获取数据时执行。如果要根据身份验证重定向,则需要单独编写代码。示例代码如下。

.success(function(data, status, headers, config,result) {    
    console.log(data);
    if(data.message === 'Logged In') {
      $state.go('admin');
    }
})