0

我正在为 1 位管理员构建一个应用程序,以便能够登录和编辑内容。登录后,应用程序将提供一个私有的 html 文档结构,而不是那些未登录的普通公共文档。我正在使用 Angular-route、Session 和 Passport 进行身份验证。我想检查用户是否在他们链接到网站上的另一个页面时登录。所以,如果他们去到他们没有被授权去的地方,他们就不能编辑网站上的内容。

当我在本地主机上运行应用程序时,我得到了一个 $injector:modulerr 。ReferenceError 说 checkAuth 没有定义。

我尝试按照此处的建议使用 $rootScope 创建全局变量:

app.run(['$rootScope', '$http', function($rootScope, $http){
    $rootScope.checkAuth = function(){
        console.log("rootScope things are happening");
        $http.get('/login/loggedin').success(function(user){
            if (user !== '0') {
                console.log('Authenticated');
                return true;
            } else {
                console.log('Not Authenticated');
                return false;
            }
        });
    };
}]);

因此,如果用户已登录,我应该得到一个 true,如果他们没有登录,我将得到一个 false。但是,我仍然收到 checkAuth is not defined injector 错误,而且我从未看到任何控制台日志。

$rootScope 的 Angular 文档说要使用这种格式:

$rootScope.Scope([providers], [instanceCache]);

所以,我尝试了这个:

$rootScope.Scope(['$rootScope', '$http', function($rootScope, $http){...

不幸的是,这也不起作用。

这是一起使用 Passport 和 Angular 的示例,我发现它有些帮助,但它们允许多个用户注册(我不想要),它仍然不能解决用于检查是否有全局函数的问题用户在网站的多个页面上登录。不过,它可能会帮助您查看类似的控制器和路由文件。

我知道您可以使用工厂和服务来做与之前类似问题中所建议的类似的事情,但我希望在尝试不同的路径之前先走这条路。显然,如果这是最好的方法,我会试一试。

4

1 回答 1

1

提供的 rootscope 声明对我来说似乎没问题。

分配根范围值。

app.run(function($rootScope) {
    $rootScope.checkAuth = function(){
        $http.get('/login/loggedin').success(function(user){
            if (user !== '0') {
                return true;
            } else {
                return false;
            }
        })
    };
});

像这样使用它(不要忘记 $rootscope 依赖)

app.controller('myCtrl', function($scope, $rootScope) {
    $scope.authenticated = function() {
        return $rootScope.checkAuth ;
    };
});

查看实时示例进行比较:http: //jsfiddle.net/TmPk5/6/

于 2015-06-04T17:26:18.567 回答