2016-03-06 20 views
10

Tôi đã cố gắng hiểu nhưng không thể xem dữ liệu tôi đang lưu trữ như thế nào và ở đâu sau khi đăng nhập.Firebase - Cách ghi/đọc dữ liệu cho mỗi người dùng sau khi xác thực

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) { 
    } 
} 

Tại thời điểm này tôi đã được xác thực thành công và đáp xuống MainActivity. Tiếp theo trong onCreate của MainActivity. Tôi khởi 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 
} 

Có một add nút mà tôi sử dụng để đẩy kỷ lục mới từ Android để 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); 
    } 
}); 

Nhưng trên mã số không thêm bất kỳ kỷ lục (hiển nhiên từ ListView mà không được cập nhật) hoặc ít nhất tôi có thể không biết được nơi để tìm kiếm dữ liệu. Tôi đã kiểm tra mở Firebase trong trình duyệt, nhưng tôi không chắc chắn cách kiểm tra dữ liệu cụ thể của người dùng?

tôi sửa đổi của tôi Firebase Rules như

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

Tôi cố gắng để mở URL như https://xyz.firebaseio.com/xxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx nhưng nó sẽ không hiển thị bất kỳ dữ liệu.

Tôi muốn có một số thông tin về:

  1. Làm thế nào để thêm dữ liệu cụ thể người dùng sau khi xác thực. Nó không thể được liền mạch như khi chúng tôi không có bất kỳ hạn chế về đọc/ghi trên cơ sở người dùng, bởi vì tôi có thể dễ dàng đọc/ghi dữ liệu.

  2. Có bất kỳ Firebase chế độ xem web nào để trực quan hóa cơ sở dữ liệu hoặc xem dữ liệu JSON, nơi tôi có thể xem/sửa đổi dữ liệu đến/từ thiết bị Android không?

+0

Theo truyền thống, bạn sẽ có nút/người dùng trong cơ sở dữ liệu nơi lưu trữ dữ liệu người dùng. Nếu đó là người dùng mới, bạn thêm uid của họ vào nút người dùng làm khóa và các con sẽ là cặp khóa: giá trị của dữ liệu bạn đã lưu trữ; tên: "bob" vị trí: "florida" vv Nếu người dùng xác thực và tồn tại, bạn sẽ biết uid của họ để bạn có thể đọc trong nút của họ từ/người dùng.Có chế độ xem web Firebase cho dữ liệu của bạn, nó được gọi là Trang tổng quan Firebase và có thể được truy cập khi bạn đăng nhập vào tài khoản của mình trên trang web Firebase. – Jay

+1

Tôi có cùng một câu hỏi và giải quyết tại đây: http://stackoverflow.com/questions/35820836/how-to-make-sure-a-user-can-only-see-and-access-their-own-data -in-firebase –

Trả lời

15

Thứ nhất, sửa đổi các quy tắc Firstbase:

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

Sau đó, trong Mã 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"); 

Cuối cùng, dữ liệu sẽ giống như thế này :

Firebase Data

+0

Cảm ơn rất nhiều! Nó hoạt động hoàn hảo! – Mithun

+1

Wow bài viết SO duy nhất này ít nhiều giải thích cho tôi cách Firebase hoạt động, không nhận ra rằng nó không phải là một bảng SQL mà là một hệ thống phân cấp – Sirens

Các vấn đề liên quan