Multiple Custom authentication requests to firebase failing

青春壹個敷衍的年華 提交于 2019-12-18 09:33:01

问题


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:


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.



来源:https://stackoverflow.com/questions/32372396/multiple-custom-authentication-requests-to-firebase-failing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!