javascript - AngularJS错误: Provider must return value from $get factory method

标签 javascript angularjs authentication

我正在尝试构建的是登录服务。 我编写了一个工厂,每个 Controller 都需要使用它。用于检查用户是否登录。但我收到此错误:

Provider must return value from $get factory method

我对 Angular 非常陌生。这是我的索引页:

<!DOCTYPE html>
<html ng-app="myApp">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Index Page</title>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
        <script src="assets/lib/angular.js"></script>
        <script src="assets/lib/angular-route.js"></script>

        <script src="app/app.js"></script>
        <script src="app/AuthenticationService.js"></script>
    </head>
    <body>
        <div ng-view></div>
    </body>
</html>

app.js 文件:

( function () {

    angular.module('myApp', [
        'ngRoute',
        'ngAnimate',
        'myApp.login',
        'myApp.home',
        'myApp.AuthenticationService'
    ])  
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider
        .when('/login', {
            controller: 'LoginController',
            templateUrl: 'loginView.html',
            controllerAs: 'vm'
        })
        .when('/home', {
            controller: 'HomeController',
            templateUrl: 'HomeView.html',
            controllerAs: 'vm'
        })
        .otherwise({
            redirectTo: '/login'
        });
    }]);    
})();

这是我建立的工厂:

    (function() {

    angular
    .module('myApp.AuthenticationService', [])

    .factory('AuthService', ["$http", "$location", function($http, $location){
        var vm = this;
        vm.checkToken = function(token){
            var data = {token: token};
            $http.post("endpoints/checkToken.php", data).success(function(response){
                if (response === "unauthorized"){
                    console.log("Logged out");
                    $location.path('/login');
                } else {
                    console.log("Logged In");
                    return response;
                }
            }).error(function(error){
                $location.path('/login');
            })

        }

    }]);

    })();

And this is how I inject it in a controller:

(function() {

    angular
        .module('myApp.home', [])

        .controller('HomeController', function($routeParams,AuthService) {
                var vm = this;      

                //If user is not logged in
                var token;
                if (localStorage['token']){
                token = JSON.parse(localStorage['token']);
                } else {
                token = "something stupid";
                }
                AuthService.checkToken(token);

                $scope.logout = function(){
                    var data = {
                        token: token
                    }

                    $http.post('endpoints/logout.php', data).success(function(response){
                        console.log(response)
                        localStorage.clear();
                        $state.go("login");
                    }).error(function(error){
                        console.error(error);
                    })
                }

        });

})();

谁能指出我犯的错误吗?提前致谢。

最佳答案

 .factory('AuthService', ["$http", "$location", function($http, $location){
        var vm = this;
        vm.checkToken = function(token){
            var data = {token: token};
            $http.post("endpoints/checkToken.php", data).success(function(response){
                if (response === "unauthorized"){
                    console.log("Logged out");
                    $location.path('/login');
                } else {
                    console.log("Logged In");
                    return response;
                }
            }).error(function(error){
                $location.path('/login');
            })

        }
       return vm;
    }]);

Angular 工厂应该返回一个由 Controller 使用的对象。

关于javascript - AngularJS错误: Provider must return value from $get factory method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37274134/

相关文章:

php - MySQLi 根据用户角色进行面向对象的重定向

java - 使用 ganymed-ssh2 >> 出现错误 "Authentication method password not supported by the server at this stage"

javascript - 正确使用||

javascript - Angularjs 绑定(bind)日期时间选择器中的值

asp.net - 配置用于 ASP.Net 身份验证的数据库

javascript - 我如何将数据绑定(bind)到 angularjs 中的该指令

javascript - 普通 JS 到 Angular 指令;创建使用 Angular Directive(指令)的 DOM 元素

javascript - 在 Node.js 中,是否监听 EventEmitter,创建对它的引用?

javascript - sqlite3更新查询刷新 Electron 渲染器进程

javascript - 在 if 语句中滚动超过特定点和屏幕宽度