PassportJS、AngularJS、$rootScope函数没有定义



我正在为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未定义注入器错误,我从来没有看到任何控制台日志。

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

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

所以,我试了这个:

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

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

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

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

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

指定一个rootscope值。

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

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

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

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

最新更新