使用angularFireAuth进行刷新时的持久性配置文件数据

时间:2013-10-30 19:21:13

标签: angularjs firebase angularfire

目前我正在使用$on('angularFireAuth:login', function(evt,auth){...get other profile info...})在用户登录后填写用户的个人资料和授权详情。这些内容会添加到authService中,以便以后在整个应用程序中轻松访问,而不会将其放在$rootscope中。 问题是这不会在刷新或重新打开时触发。由于会话令牌或其他原因,用户仍然经过身份验证,但是,他们需要重新登录才能加载其他配置文件。

对此有什么合适的解决方案? 是否有一个我应该使用的无证件事件而不是登录?

这是我正在使用的app.js:

angular.module('myApp',['firebase']).
    constant({FirebaseUrl:"https://<foo>.firebaseio.com/"}).
    service('authService', function authService(){
        return {
            isLogged:false,
            name:null,
            email:null,
            id:null,
            group:null,
            err:null
        }
    }).
    controller('AuthCtrl', function($scope, authService, angularFireAuth, angularFireCollection, FirebaseUrl){
        angularFireAuth.initialize(FirebaseUrl, {scope:$scope, name:"auth"});
        $scope.login = function(){
            angularFireAuth.login('password', {
                email: 'test@test.foo',
                password: 'test'
                });
        }
        $scope.$on("angularFireAuth:login",function(evt,auth){
            url = FirebaseUrl + 'profiles/user-' + $scope.auth.id;
            $scope.url = url;
            var fbref = new Firebase(url);
            fbref.once('value',function(profileSnapshot){
                $scope.name = profileSnapshot.child('name').val();
                $scope.group = profileSnapshot.child('group').val();
            });
            //set authService stuff
            authService.name = $scope.name;
            authService.group = $scope.group;
            authService.email = $scope.auth.email;
            authService.id = $scope.auth.id;
            authService.isLogged = true;
        });

        $scope.logout = function(){
            angularFireAuth.logout();
            authService.email = null;
            authService.id = null;
            authService.isLogged = false;
            authService.name = null;
            authService.group = null;
        }
    }).
    controller('NavCtrl', function($scope, authService){

    });

1 个答案:

答案 0 :(得分:0)

您应该将配置文件信息与身份验证事件分离,因为您已经注意到,这些事件仅在身份验证状态更改时触发。您应该有一个单独的服务或工厂来处理配置文件信息,在页面加载时调用(如果用户已登录)和身份验证事件。