Theo mặc định, cơ sở dữ liệu trong một dự án trong Bảng điều khiển Firebase chỉ có thể đọc / ghi bởi người dùng quản trị (ví dụ: trong Chức năng đám mây hoặc các quy trình sử dụng SDK quản trị). Người dùng SDK phía máy khách thông thường không thể truy cập cơ sở dữ liệu, trừ khi bạn thay đổi quy tắc bảo mật phía máy chủ.
Bạn có thể thay đổi các quy tắc để cơ sở dữ liệu chỉ có thể đọc / ghi bởi người dùng đã xác thực:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Xem phần bắt đầu nhanh để biết các quy tắc bảo mật của Cơ sở dữ liệu Firebase .
Nhưng vì bạn không đăng nhập người dùng từ mã của mình, nên cơ sở dữ liệu từ chối bạn truy cập vào dữ liệu. Để giải quyết vấn đề đó, bạn sẽ cần cho phép truy cập chưa được xác thực vào cơ sở dữ liệu của mình hoặc đăng nhập người dùng trước khi truy cập cơ sở dữ liệu.
Cho phép truy cập chưa được xác thực vào cơ sở dữ liệu của bạn
Cách giải quyết đơn giản nhất hiện tại (cho đến khi hướng dẫn được cập nhật) là vào bảng Cơ sở dữ liệu trong bảng điều khiển dành cho bạn dự án, chọn tab Quy tắc và thay thế nội dung bằng các quy tắc sau:
{
"rules": {
".read": true,
".write": true
}
}
Điều này làm cho cơ sở dữ liệu mới của bạn có thể đọc và ghi được bởi bất kỳ ai biết URL của cơ sở dữ liệu. Hãy chắc chắn bảo mật lại cơ sở dữ liệu của bạn trước khi bạn đi vào sản xuất, nếu không ai đó có thể bắt đầu lạm dụng nó.
Đăng nhập người dùng trước khi truy cập cơ sở dữ liệu
Để có (một chút) giải pháp tốn thời gian hơn nhưng an toàn hơn, hãy gọi một trong các signIn...
phương pháp Xác thực Firebase để đảm bảo người dùng đã đăng nhập trước khi truy cập cơ sở dữ liệu. Cách đơn giản nhất để làm điều này là sử dụng xác thực ẩn danh :
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Và sau đó đính kèm người nghe của bạn khi đăng nhập được phát hiện
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
} else {
// User is signed out.
// ...
}
// ...
});