【问题标题】:Multiple Custom authentication requests to firebase failing对 Firebase 的多个自定义身份验证请求失败
【发布时间】:2015-09-03 09:53:06
【问题描述】:

当尝试一个接一个地获取多个 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/

【问题讨论】:

  • 您不能同时进行多个身份验证。这是XY Problem。这里的最终目标是什么?您可能希望使用单个令牌并设置安全规则以允许更广泛的访问,可能通过将数据添加到您可以从规则中引用的 Firebase 来使用基于角色的权限。

标签: javascript callback firebase custom-authentication


【解决方案1】:

由于身份验证是异步进行的,因此这些调用不会彼此之后执行,而是主要并行执行。当您启动新的身份验证调用时,它会自动取消现有的身份验证调用。在不了解您的用例的情况下,您可以在创建 Firebase 参考时传递一个额外的(未记录的)参数,在其自己的上下文/会话中启动每个 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 客户端中为您提供三个并发的经过身份验证的会话。

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

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

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 1970-01-01
    • 2016-07-22
    • 2020-04-01
    • 2022-12-10
    • 2020-10-29
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多