假设我已将我的写入规则配置为特定的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
响应
答案 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之前发生用户身份验证事件。