让经过身份验证的用户写入其节点

时间:2016-06-24 19:01:40

标签: android firebase firebase-realtime-database rules firebase-authentication

我想我有一个非常基本的问题,但由于糟糕的教程和奇怪的结果,我真的遇到了这个问题。 因此,我从这里https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio#adding_and_removing_to-do_items_from_the_mobile_app遵循了有关如何使用Android的Firebase用户身份验证和数据库的教程。现在我只想让用户在我的数据库中写入自己的节点。我的数据应如下所示:

shoppinglistplusplus-ss
    --> users
        --> several nodes with Firebase Uids.

我对此数据库的规则如下:

{
    "rules": {
        "users": {
            "$uid": {
                ".read": "$uid === auth.uid",
                ".write": "$uid === auth.uid"
            }
        }
    }
}.

现在数据库是完全空的。我正在使用Facebook登录,因此我将Facebook的访问令牌传递给Firebase。在我的Android应用程序中,我尝试使用以下代码写入它:

AuthCredential credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().getToken());
mAuth.signInWithCredential(credential).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        new Firebase("https://shoppinglistplusplus-ss.firebaseio.com")
                            .child("users")
                            .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                            .setValue("bub bub bub");
                    }
                }
            });.

所以整个代码都在运行。不幸的是,我在网上看到我的数据库中出现的任何数据。现在这里有一个奇怪的部分。如果我使用模拟器验证我的规则,我会得到积极的反馈。此外,当我将数据库规则切换为公共时,我看到数据即将出现。

此外,我在此处看到了另一种写入数据库的方法https://firebase.google.com/docs/database/android/start/。无论如何使用它给了我一个例外,因为我不知道如何设置我的Firebase网址。

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");.

我做错了什么?有什么建议吗?

0 个答案:

没有答案