Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase auth()成功,但检查登录状态的安全规则仍然失败_Firebase - Fatal编程技术网

Firebase auth()成功,但检查登录状态的安全规则仍然失败

Firebase auth()成功,但检查登录状态的安全规则仍然失败,firebase,Firebase,当我使用“.read”:“auth!=null”,ref.on()在ref.auth()无误完成后引发权限错误。只要用户登录,授予读取权限的正确方式是什么 安全规则: { "rules": { ".read": "auth != null", ".write": "auth.admin == true" } } 下面是在我对Firebase ref执行“on()”之前返回Firebase ref的代码: 主控制器: $scope.list = $$firebase.b

当我使用
“.read”:“auth!=null”
ref.on()
ref.auth()
无误完成后引发权限错误。只要用户登录,授予读取权限的正确方式是什么

安全规则:

{
  "rules": { 
    ".read": "auth != null",
    ".write": "auth.admin == true"
  }
}
下面是在我对Firebase ref执行“on()”之前返回Firebase ref的代码:

主控制器:

$scope.list = $$firebase.bind("/data", []);
控制台说

Firebase /data login succeeded. app.js:298
FIREBASE WARNING: on() or once() for /data failed: permission_denied firebase.js:33

从您的代码中我不清楚您是否在auth完成后返回引用。具体而言:

ref:函数(路径){
var self=这个;
var ref=新Firebase(self.url+path);
ref.auth(self.auth_标记,函数(err){
if(err&&console)console.log(“Firebase”+path+“登录失败!”);
如果(console)console.log(“Firebase”+路径+“登录成功”);
});
返回ref;
}
正在立即返回引用。对auth的回调是异步的,因此如果在调用回调之前使用ref,则会话将未经身份验证

看起来您使用的是Angular,所以我举了一个小示例,它与您使用的安全规则相同,但工作正常:

如果我要重写您的代码,我会按如下方式执行:

bind:函数(路径){
var ref=新Firebase(self.url+path);
var d=self._q.defer();//将$q分配给构造函数中的这个。_q。
ref.auth(self.auth_标记,函数(err){
如果(!err){
参考一次(“值”,功能(捕捉){
d、 解析(snap.val());
});
}
});
回报承诺;
}
...
//在控制器中:
$scope.list=$$firebase.bind(“/data”);
我强烈建议通过$q模块使用Promissions,以确保在验证完成之前不要使用Firebase引用。更好的解决方案是为Angular使用官方Firebase绑定,它已经为您解决了所有这些问题:


希望这有帮助

回复:3-您能否分享您的安全规则,并显示您试图执行的
ref.on
路径,以便我们进行分析?可以使用“.read”;这不是你的错误。另一方面,您的“问题”现在包括3个非常不同的讨论:筛选、查询列表与哈希,最后排除权限错误。好的,这看起来是授予读取权限的正确方法。我怀疑这是罪魁祸首,或者作者没有真正成功。你有没有去锻造厂试过“模拟器”?这可能会提供一些有用的线索。正如加藤所提到的,规则看起来是正确的。你也能分享你的代码片段吗?另外-尝试模拟,并确保您使用的Firebase URL正确!您好,我需要一个“authed”ref的实例。如何获得该实例?在调用ref.auth的回调后,使用第一个参数“null”对同一个ref进行身份验证。因此,要获得authend ref的实例,只需确保将任何需要它的代码放入回调的if(!err)块中。
Firebase /data login succeeded. app.js:298
FIREBASE WARNING: on() or once() for /data failed: permission_denied firebase.js:33