javascript - 对 firebase 的多个自定义身份验证请求失败

标签 javascript callback firebase custom-authentication

当尝试依次获取多个 Firebase 引用时,只会调用最后一个请求回调。

下面我尝试获取不同数据的 3 个 firebase 引用

console.log('authenticating Users');
var firebaseRef1 = new Firebase('https://stckflw.firebaseio.com/Users');
firebaseRef1.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Users');
} );
console.log('authenticating Messages');
var firebaseRef2 = new Firebase('https://stckflw.firebaseio.com/Messages');
firebaseRef2.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Messages');
} );
console.log('authenticating Emails');
var firebaseRef3 = new Firebase('https://stckflw.firebaseio.com/Emails');
firebaseRef3.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Emails');
} );

我看到这样的日志

验证用户身份
验证消息
验证电子邮件

电子邮件身份验证回调

虽然我希望在身份验证时依次获得所有 3 个回调,所以我希望看到像

这样的日志

验证用户身份
验证消息
验证电子邮件

用户认证回调
消息认证回调
电子邮件身份验证回调

我是否遗漏了一些导致这种情况发生的原因?

我想以这样的方式实现它,即所有回调都在身份验证时触发,而不会丢失任何回调。

我在这里创建了一个示例 http://jsfiddle.net/aniruddhbk/rvkz9mrt/4/

最佳答案

由于身份验证是异步发生的,因此这些调用不会彼此之后执行,而是大多并行执行。当您开始新的身份验证调用时,它会自动取消现有的身份验证调用。在不了解您的用例的情况下,您可以在创建 Firebase 引用时传递一个额外的(未记录的)参数,在自己的上下文/ session 中启动每个 Firebase :

console.log('authenticating Users');
var firebaseRef1 = new Firebase('https://stckflw.firebaseio.com/Users', 'Users');
firebaseRef1.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Users');
} );
console.log('authenticating Messages');
var firebaseRef2 = new Firebase('https://stckflw.firebaseio.com/Messages', 'Messages');
firebaseRef2.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Messages');
} );
console.log('authenticating Emails');
var firebaseRef3 = new Firebase('https://stckflw.firebaseio.com/Emails', 'Emails');
firebaseRef3.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Emails');
} );

这将允许每个调用完成,并在一个 Firebase 客户端中为您提供三个并发的经过身份验证的 session 。

authenticating Users
authenticating Messages
authenticating Emails
authentication callback for Users
authentication callback for Messages
authentication callback for Emails

正如 Kato 所说:最好这样做,并找到一种方法将所有三个 session 的权限合并到一个 token / session 中。

关于javascript - 对 firebase 的多个自定义身份验证请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372396/

相关文章:

javascript - 使用 HTTP 请求关闭 for 循环

android - 无法解析 FirebaseMessagingService android

Firebase 项目 ID 必须为小写

javascript - 如何使用 Axios 捕获服务器代码错误

javascript - 使用 javascript 检测 html5 验证

javascript - 向 Canvas 面孔添加警报

c++ - 带有异步操作的 std::function 回调

javascript - 使用 CSS3 调整大小属性拆分 Pane

javascript - 我如何在 webstorm 中使用 JSDoc @param 回调处理程序的参数?

javascript - 使用嵌套回调设置js模块的属性