持久身份验证状态Firebase

时间:2013-11-06 19:58:29

标签: angularjs firebase angularfire firebase-security

假设我已将我的写入规则配置为特定的email

{
  "rules": {
    ".read": true,
    ".write": "auth.email == 'example@example.com'"
  }
}

我使用angularFireAuth服务登录:

.controller('loginCtrl', ["$scope", "$rootScope", "angularFireAuth", function($scope, $rootScope, angularFireAuth) {

    var ref = new Firebase("https://test.firebaseio.com/");
    angularFireAuth.initialize(ref, {scope: $scope, name: "user"});

    $scope.cred = {};

    $scope.signin = function() {

        angularFireAuth.login('password', {
            email: $scope.cred.user,
            password: $scope.cred.password,
            rememberMe: true
        });
    }
}]);

我有一个newCtrl用于向我的收藏中添加新项目:

.controller('newCtrl', ["$scope", "$rootScope", "angularFireCollection", function($scope, $rootScope, angularFireCollection) {

    var ref = new Firebase("https://test.firebaseio.com/");
    $scope.items = angularFireCollection(ref);
}]);

当我在视图中调用items.add()时:

<input type="text" ng-model="item.name" />
<input type="text" ng-model="item.desc" />
<button ng-click="items.add(item)">submit</button>

我通过Not Authorized

成功登录后,即使也收到loginCtrl响应
  • 登录后,如何在整个应用程序中创建持久身份验证状态?
  • 退出后,如何在整个应用程序中删除持久身份验证状态?

2 个答案:

答案 0 :(得分:1)

您的身份验证状态是基于会话的,不依赖于您的控制器范围,因此您已在整个应用程序中拥有“持久身份验证状态”。

您的代码肯定会有其他内容产生错误,但就您的问题而言,您可以使用example@example.com作为电子邮件here查看工作示例{{3}} 1}}作为密码。

我也符合您的安全规则,因此如果您使用密码example登录为test@example.com,则无法创建test

答案 1 :(得分:0)

我可以告诉angularFireAuth从$ rootscope广播登录事件。您可以将事情设置为.$on('angularFireAuth:login',function(event){...}).$on('angularFireAuth:logout',function(event){...}).$on('angularFireAuth:error',function(event,error){...})。考虑到这一点,您可能需要以下内容:

.controller('newCtrl', ["$scope", "$rootScope", "angularFireCollection", function($scope, $rootScope, angularFireCollection) {
    var ref = new Firebase("https://test.firebaseio.com/");
    $scope.items = angularFireCollection(ref);
    $scope.$on('angularFireAuth:login', function(){
        $scope.addItem=function(item){
            $scope.items.add(item);
        };
    });
}]);

..应该确保在将函数分配给$ scope之前发生用户身份验证事件。