当我尝试制作多个new Firebase(url);
实例时,我遇到了问题。
例如:
var token1 = "c.AdASdsAsds...";
var token2 = "c.dkasdEddss...";
var v1 = new Firebase('https://developer-api.nest.com');
v1.auth(token1,function(err){
console.log("Connected 1 "+err);
},function(err){ console.log("Cancel 1: "+err); });
var v2 = new Firebase('https://developer-api.nest.com');
v2.auth(token2,function(err){
console.log("Connected 2 "+err);
},function(err){ console.log("Cancel 2 "+err); });
控制台日志: Connected 2 null
,就是这样......不再是。
所以,这意味着它永远不会从v1.auth();
调用回调函数而忽略它,看起来它被v2.auth();
覆盖,即使它们是不同的Firebase实例,它会干扰其他一切,例如,v1.child("path").on("value",function(snapshot){});
和v2.child("path").on("value",function(snapshot){});
在发生这种情况时无效。
答案 0 :(得分:8)
您只能在使用Firebase身份验证的单个页面中进行一次身份验证。
来自this page in the Firebase documentation:
对Firebase的所有引用都具有相同的身份验证状态。因此,如果您两次调用新的Firebase()并在其中一个上调用auth(),则会对它们进行身份验证。
当然,nest-api身份验证的工作原理可能不同,但我对此表示怀疑。
您提供了another page in the Firebase documentation:
的引用即使我们在不同的Firebase引用上调用.auth,也无法同时使用同一Firebase的多个凭据进行身份验证。身份验证状态是全局的,适用于对Firebase的所有引用。 但是,可以创建对两个或多个不同Firebase的引用,并对这些Firebase进行独立验证。
但是在您的代码中,两个连接都属于同一个Firebase:https://developer-api.nest.com。一个Firebase =>一个身份验证状态。
答案 1 :(得分:0)
您可以使用新的Firebase.Context()作为第二个参数创建多个实例!
var token1 = "c.AdASdsAsds...";
var token2 = "c.dkasdEddss...";
var v1 = new Firebase('https://developer-api.nest.com', new Firebase.Context());
v1.auth(token1,function(err){
console.log("Connected 1 "+err);
},function(err){ console.log("Cancel 1: "+err); });
var v2 = new Firebase('https://developer-api.nest.com', new Firebase.Context());
v2.auth(token2,function(err){
console.log("Connected 2 "+err);
},function(err){ console.log("Cancel 2 "+err); });