Firebase身份验证限制

时间:2015-05-12 17:56:06

标签: java firebase firebase-security firebasesimplelogin firebase-authentication

我是Firebase的新手,所以任何见解都值得赞赏。我正在编写Java服务器端测试代码。我从数据库中抓取了几个用户,并尝试将数据迁移到Firebase中经过用户身份验证的节点中。我的代码从数据库中选择一些用户并为每个用户旋转一个新线程。

第一个线程成功连接并验证。随后的同步身份验证尝试失败,并显示以下错误消息。每个线程都有自己的Firebase引用对象实例。同时登录的数量是否有限制,可能来自同一个IP地址? Haven还没有在文档中找到任何东西。

如果我将代码更改为在单个线程中运行并逐个登录并注销每个用户,那么我不会收到错误。

非常感谢任何见解。

Message: -5
Message: Due to another authentication attempt, this authentication attempt was aborted before it could complete.

            Firebase ref = new Firebase("https://<instance>.firebaseio.com/");

            ref.authWithPassword(mEmail, mPassword, new Firebase.AuthResultHandler() {
            @Override
            public void onAuthenticated(AuthData authData) {
                System.out.println("Successfully authenticated: " + mEmail);
                user.setUID(authData.getUid());
                user.setCurrentUserRef(ref);
                done.set(true);
            }

            @Override
            public void onAuthenticationError(FirebaseError firebaseError) {
                System.out.println("Error during authentication: " + mEmail);
                System.out.println("Error during authentication: " + ref.toString());

                System.out.println("Message: " + firebaseError.getCode());
                System.out.println("Message: " + firebaseError.getDetails());
                System.out.println("Message: " + firebaseError.getMessage());

                done.set(true);
            }});
            waitForCompletion(this.getClass().getName());

1 个答案:

答案 0 :(得分:4)

如果由于安全规则而要作为不同用户进行身份验证,则使用server token是更好的解决方案。

Firebase连接最多只能在任何给定时间对一个用户进行身份验证。但是,在Firebase Java库中,有一个未记录(并且未经官方支持)的解决方法来创建多个独立连接。在包com.firebase.client中的类中,您可以运行以下代码

// important this code needs to be in the package com.firebase.client
Config config1 = new Config();
Config config2 = new Config();
Firebase ref1 = new Firebase("https://<your-firebase>.firebaseio.com", config1);
Firebase ref2 = new Firebase("https://<your-firebase>.firebaseio.com", config2);
// ref1 and ref2 will now have independent connections, listeners and authentication states

请注意,这些也会打开与服务器的独立连接。