web-dev-qa-db-ja.com

Firebase-認証後にユーザーごとにデータを読み書きする方法

ログインしようとした後、私が保存しているデータがどのようにどこにあるのかを理解しようとしましたが、わかりません。

public static final String BASE_URL = "https://xyz.firebaseio.com";

Firebase ref = new Firebase(FirebaseUtils.BASE_URL);
    ref.authWithPassword("[email protected]", "some_password", new Firebase.AuthResultHandler() {

    @Override
    public void onAuthenticated(AuthData authData) {
        Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_SHORT).show();
        startActivity(new Intent(LoginActivity.this, MainActivity.class));
    }
    @Override
    public void onAuthenticationError(FirebaseError firebaseError) {
    }
}

この時点で、私は認証され、MainActivityに到達しました。次はonCreate/MainActivityです。初期化Firebase

firebase = new Firebase(FirebaseUtils.BASE_URL).child("box");

// adapter below is an ArrayAdapter feeding ListView
firebase.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        if (dataSnapshot.getValue(Box.class) instanceof Box)
            adapter.add(dataSnapshot.getValue(Box.class).getName());
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        adapter.remove(dataSnapshot.getValue(Box.class).getName());
    }

    // other callbacks
}

Android to Firebaseから新しいレコードをプッシュするために使用した追加ボタンがあります。

final Button button = (Button) findViewById(R.id.addButton);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Box box = new Box("Box " + System.currentTimeMillis(), "Location " + System.currentTimeMillis());
        Firebase fbBox = firebase.child("" + System.currentTimeMillis());
        fbBox.setValue(box);
    }
});

しかし、上記のコードはレコードを追加しません(ListViewから明らかですが、更新されていません)。または、少なくともデータの検索場所がわからない可能性があります。ブラウザでFirebaseを開くことを確認しましたが、ユーザー固有のデータを確認する方法がわかりません。

Firebase Rulesを次のように変更しました

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

https://xyz.firebaseio.com/xxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx などのURLを開こうとしましたが、データが表示されませんでした。

私はいくつかの情報が欲しいのですが:

  1. 認証後にユーザー固有のデータを追加する方法。簡単にデータを読み書きできるので、ユーザーごとの読み書きに制限がない場合のようにシームレスにできません。

  2. Androidデバイスへ/からデータを表示/変更できる場所で、データベースを視覚化したりJSONデータを表示したりするためのFirebase Webビューはありますか?

12
Mithun

まず、Firebaseルールを次のように変更します:

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

次に、Javaコード:

Firebase rootRef = new Firebase("https://user-account.firebaseio.com/");
// Assuming the user is already logged in.
Firebase userRef = rootRef.child("users/" + rootRef.getAuth().getUid());
userRef.child("message1").setValue("Hello World");

結局、データは次のようになります:

Firebase Data

15
Xi Wei

Webエンドの場合

JavaScriptコード:

var user = firebase.auth().currentUser;

if (user != null) {
   uid = user.uid;
   firebase.database().ref('/users/'+uid).Push({
      foo: 'abc',
      bar: 'pqr'
   });
}

詳細については https://firebase.google.com/docs/auth/web/manage-users#get_the_currently_signed-in_user をご覧ください。

3
shriyog