0

假设我已将写入规则配置为特定的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

  • 登录后如何在整个应用程序中创建持久身份验证状态?
  • 注销后如何在整个应用程序中删除持久身份验证状态?
4

2 回答 2

1

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

您的代码肯定有其他问题会产生该错误,但就您的问题而言,您可以在此处看到一个使用example@example.com电子邮件和example密码的工作示例。

我也匹配了您的安全规则,因此如果您test@example.com使用密码登录,test您将无法创建items.

于 2013-11-06T21:40:51.950 回答
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 之前发生用户身份验证事件。

于 2013-11-06T21:13:48.647 回答