PassportJS,AngularJS,未定义 $rootScope 函数

PassportJS, AngularJS, $rootScope function is not defined

我正在为 1 位管理员构建一个应用程序,以便能够登录和编辑内容。登录后,应用程序将提供一个私人 html 文档结构,而不是那些未登录的文档结构,而不是显示正常的 public 文档。我正在使用 Angular-route、Session 和 Passport 进行身份验证。我想检查用户是否在 link 访问网站上的另一个页面时登录。因此,如果他们去了他们未获授权的地方,他们将无法编辑网站上的内容。

当我 运行 本地主机上的应用程序时,我得到一个 $injector:modulerr。 ReferenceError 表示未定义 checkAuth。

我尝试按照建议使用 $rootScope 创建一个全局变量 here:

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){...

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

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

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

提供的根范围声明对我来说似乎没问题。

分配根作用域值。

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/