Dựa trên câu trả lời của prufrofro và Frank van Puffelen ở đây , tôi kết hợp thiết lập này không ngăn được việc cào, nhưng có thể khiến việc sử dụng khóa API của bạn khó hơn một chút.
Cảnh báo: Để có được dữ liệu của bạn, ngay cả với phương thức này, ví dụ, người ta có thể chỉ cần mở bảng điều khiển JS trong Chrome và gõ:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Chỉ các quy tắc bảo mật cơ sở dữ liệu có thể bảo vệ dữ liệu của bạn.
Tuy nhiên, tôi đã hạn chế sử dụng khóa API sản xuất cho tên miền của mình như thế này:
- https://console.developers.google.com/apis
- Chọn dự án Firebase của bạn
- Thông tin xác thực
- Trong khóa API, chọn khóa Trình duyệt của bạn. Nó sẽ giống như thế này: " Khóa trình duyệt (tự động được tạo bởi Google Service) "
- Trong " Chấp nhận yêu cầu từ những người giới thiệu HTTP (trang web) " này, hãy thêm URL của ứng dụng của bạn (ví dụ
projectname.firebaseapp.com/*
:)
Bây giờ ứng dụng sẽ chỉ hoạt động trên tên miền cụ thể này. Vì vậy, tôi đã tạo một Khóa API khác sẽ riêng tư để phát triển localhost.
- Nhấp vào Tạo thông tin đăng nhập> Khóa API
Theo mặc định, như được đề cập bởi Emmanuel Campos, Firebase chỉ có danh sách trắng localhost
và miền lưu trữ Firebase của bạn .
Để đảm bảo rằng tôi không xuất bản khóa API sai, tôi sử dụng một trong các phương pháp sau để tự động sử dụng một trong những phương thức hạn chế hơn trong sản xuất.
Thiết lập cho ứng dụng tạo-phản ứng
Trong /env.development
:
REACT_APP_API_KEY=###dev-key###
Trong /env.production
:
REACT_APP_API_KEY=###public-key###
Trong /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Thiết lập trước đây của tôi cho Webpack:
Tôi sử dụng Webpack để xây dựng ứng dụng sản xuất của mình và tôi đặt khóa API dev của mình bên trong index.html
giống như bạn thường làm. Sau đó, bên trong webpack.production.config.js
tệp của tôi , tôi thay thế khóa mỗi lần index.html
được sao chép vào bản dựng sản xuất:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]