即使登录凭据为false,Angular也会重定向到主页

时间:2015-10-13 04:20:44

标签: javascript php angularjs validation login

我很遗憾地问这个问题,但我现在已经工作了好几个小时了,但仍然无法理解。我们使用API​​从数据库中为仅限成员的站点提取数据。如果信息正确,登录表单应该重定向到站点的主页,否则它应该显示一个弹出窗口,上面写着:“用户名和密码无效”(如果字段留空,我们也会想要一条错误消息)。但是,无论信息是否正确,登录仍将转到主页。

这是html表单 - login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src ="angular.js"></script>
    <script src ="app.js"></script>
    <link rel="stylesheet" href="/CMPS1/css/login.css">
</head>

<body>

<div ng-app = "sga">
    <div ng-controller="MainController">

        <div class="body"></div>
        <div class="grad"></div>
        <div class="header">
            <div><a style="color:gold">SGA</a><span><a style="color: seagreen"><strong>Connect</strong></a></span></div>
        </div>
        <br><br>
        <div class="login">
            <input type="text" placeholder="username" ng-model="username" required><br>
            <input type="password" placeholder="password" ng-model="password" required><br>
            <input type="button" value="Login"  ng-click="login(username,password)">
        </div>

    </div>
</div>    
</body>
</html>

我们的控制器/ api - login_controller.php(基于代码点火器框架)

<?php
class Login_controller extends CI_Controller
{

    function validate(){
//       when posting  json data to the api
        $json = key($this->input->post(NULL, TRUE));
        $json = json_decode($json);
        $username = $json->username;
        $password = md5($json->password);
//        when posting with a normal post method with parameters
//        $username = $this->input->post('username');
//        $password = md5($this->input->post('password'));
        $this->load->model('Membership_model');
        $query = $this-Membership_model->validate($username,$password);
        if($query) {
            $data['status']= true;
        }
        else{
            $data['status'] = false;

        }

        $this->load->view('verify.php', $data);
    }

}
?>

角度文件 - app.js

(function() {
    angular.module("sga",[])
        .controller("MainController",["$scope","$http",function($scope,$http){
        $scope.login = function (username, password) {

            var req = {
                url: 'http://localhost/CMPS1/API/application/controllers/Login_controller/validate',
                method: "POST",
                data: {
                    username: username,
                    password: password
                },
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}

            };

            if ($http(req).then(function (response) {
                    if (response.data) {
                        window.open('index.html', '_self');
                    }
                }));

            else {
                alert("Invalid username or password.");
            }
        };

    }]);

})();

实际检查数据库以查看信息是否正确的文件 - membership_model.php

<?php
class Membership_model extends CI_Model{
    function validate($username,$password){
        $this->db->where('username',$username);
        $this->db->where('password',$password);
        $query = $this->db->get('users');
        if($query->num_rows() == 1){
            return $query;
        }
        else{
            return false;
        }

    }
}

任何帮助都会非常感激。谢谢。

1 个答案:

答案 0 :(得分:0)

Angularjs用于创建单页面应用程序。在您的MainController中,您将成功时将用户重定向到index.html。

您应该有两个视图,一个用于登录,另一个用于angularjs中的主页。 包含在index.html中并为登录和主页创建路由。

.config(function ($routeProvider, $httpProvider) {
$routeProvider
  .when('/', {
    templateUrl: 'views/login.html',
    controller: 'LoginCtrl',
    controllerAs: 'login'
  })
  .when('/home', {
    templateUrl: 'views/home.html',
    controller: 'HomeCtrl',
    controllerAs: 'home'
  })
  .otherwise({
    redirectTo: '/'
  });

});

在成功回调中,只需使用“$ location.path(”/ home“)重定向到/ home;”