Multiple Custom authentication requests to firebas

2019-01-29 06:59发布

When trying to get multiple firebase references one after the other, only the last requests callbacks gets called.

Below I am trying to get 3 firebase references for different data

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');
} );

I am seeing the log like this

authenticating Users
authenticating Messages
authenticating Emails

authentication callback for Emails

Whereas I expect to get all 3 callbacks one after another on authentication, so I expect to see logs like

authenticating Users
authenticating Messages
authenticating Emails

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

Am I missing something here cause of which this happens?

I want to achieve it in such a way that all the callback gets triggered on authentication, without missing any.

I have created a example here http://jsfiddle.net/aniruddhbk/rvkz9mrt/4/

1条回答
Ridiculous、
2楼-- · 2019-01-29 07:36

Since authentication happens asynchronously, these calls are not executing after each other, but mostly in parallel. When you start a new authentication call it automatically cancels the existing one. Without understanding much about your use-case, you can start each Firebase in its own context/session, by passing an extra (undocumented) parameter in when you create the Firebase reference:

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');
} );

This will allow each call to complete and gives you three concurrent authenticated sessions in one Firebase client.

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

As Kato said: it is probably better to not do this and find a way to combine the permissions for all three sessions into a single token/session.

查看更多
登录 后发表回答