我尝试使用angualrJS和php进行身份验证。我通过console.log测试了它,当密码不正确时我收到错误信息,当密码正确时我没有得到任何东西,在这种情况下,我想被骑到其他视图,我该怎么办呢:
app.js
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)
{
// $window.location.href = '#/admin';
console.log(data);
})
.error(function(data, status, headers, config)
{
console.log('error');
});
}
});
的login.php
<?php
$data = json_decode(file_get_contents("php://input"));
$connect = mysqli_connect("localhost", "root", "", "test");
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;
}
else
{
echo 'The username or password are incorrect!';
}
}
?>
如您所见,我在app.js中有一个评论行:// $ window.location.href ='#/ admin';我把它作为评论,因为当我把它,它重定向到管理员视图,但密码不正确。
提前致谢
答案 0 :(得分:0)
使用AngularJS,您可以使用$location
服务
尝试使用:
$location.path("your new path here")
举个例子:请参考另一篇文章的以下答案:
答案 1 :(得分:0)
.success是$ http服务的一个属性,所以如果数据变量中有一些值,那么$ window.location最终会被调用..所以为了改善你可以在$ http服务中使用if条件检查传递的用户名和密码以及从服务获得的响应,然后在if条件下将其重定向到另一个页面。
app.service('AuthenticationService', function ($http, $window){
this.login = function (username, password) {
return $http({
url: 'http://localhost/deb/login.php',
method: 'POST',
params: {
NomClient : username,
mdp : password
}
})
};
});
app.controller('loginCtrl', function ($scope, $state, $http, $window, AuthenticationService, $remember) {
$scope.submit = function()
{
AuthenticationService.login($scope.NomClient,$scope.mdp)
.then(function(response) {
if (response.data.NomClient == $scope.NomClient && response.data.mdp == $scope.mdp)
{
$state.go('application.home');
}
else {
alert('Credentials do not match our records. Please try again.');
}
})
}
});
而不是$ window.location你可以使用angularJS的$ state.go功能。它会将您的页面重定向到将要提到的特定状态,它将在路径文件中查找该状态,并将与其templateUrl和控制器一起执行该状态。
答案 2 :(得分:0)
在login.php中尝试此代码
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 ;
die;
并检查js中的结果代码(如果它是200)那么它将在其他方面成功地出错。
答案 3 :(得分:0)
将.success\.error
更改为.then()
,将代码更改为:
$http.post('http://localhost/deb/login.php', data).then(function(response) {
console.log(response.data);
$window.location.href = '#/admin';
}, function(error) {
console.log('error');
});
答案 4 :(得分:0)
这里正确运行的代码可以正确测试您的问题。如果你还在寻找解决方案
app.js
ZoneId.of("Asia/Hong_Kong")
login.php中
ZoneId.systemDefault()
的login.html
app.controller('loginCtrl', function ($scope, $http,$state) {
$scope.submit = function ()
{
$scope.data = {
username: $scope.username,
password: $scope.password
}
$http.post('http://localhost/HTML5Application/public_html/login.php', {serviceData: $scope.data})
.success(function (data) {
alert(data);
$state.go('newState');
})
.error(function (data) {
alert("problem with service call");
});
};
});
答案 5 :(得分:0)
谢谢大家,这是这个问题的解决方案,由“Mr_Perfect”解决: 我们只是在suceess中添加一个条件:
$http.post('http://localhost/deb/login.php', data)
.success(function(data, status, headers, config,result)
{
console.log(data);
if(data.code == 200){
$state.go('admin');
}
})
.error(function(data, status, headers, config, rsult)
{
console.log('error');
});
谢谢大家