
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
react-admin-firebase
Advanced tools
A firebase data provider for the React-Admin framework. It maps collections from the Firebase database (Firestore) to your react-admin application. It's an npm package!
Pull requests welcome!!
(GET, POST, GET_LIST ect...)<FileInput /> fieldyarn add react-admin-firebase firebase
or
npm install --save react-admin-firebase firebase
A simple example based on the React Admin Tutorial.
posts collection in the firebase firestore databaseimport {
FirebaseAuthProvider,
FirebaseDataProvider,
FirebaseRealTimeSaga
} from 'react-admin-firebase';
const config = {
apiKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
authDomain: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
databaseURL: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
projectId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
storageBucket: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
messagingSenderId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
};
// All options are optional
const options = {
// Use a different root document to set your resource collections, by default it uses the root collections of firestore
rootRef: 'root-collection/some-doc' | () => 'root-collection/some-doc',
// Your own, previously initialized firebase app instance
app: firebaseAppInstance,
// Enable logging of react-admin-firebase
logging: true,
// Resources to watch for realtime updates, will implicitly watch all resources by default, if not set.
watch: ['posts'],
// Resources you explicitly dont want realtime updates for
dontwatch: ['comments'],
// Authentication persistence, defaults to 'session', options are 'session' | 'local' | 'none'
persistence: 'session',
// Disable the metadata; 'createdate', 'lastupdate', 'createdby', 'updatedby'
disableMeta: false,
// Have custom metadata field names instead of: 'createdate', 'lastupdate', 'createdby', 'updatedby'
renameMetaFields: {
created_at: 'my_created_at', // default: 'createdate'
created_by: 'my_created_by', // default: 'createdby'
updated_at: 'my_updated_at', // default: 'lastupdate'
updated_by: 'my_updated_by', // default: 'updatedby'
},
// Prevents document from getting the ID field added as a property
dontAddIdFieldToDoc: false,
// Adds 'deleted' meta field for non-destructive deleting functionality
// NOTE: Hides 'deleted' records from list views unless overridden by filtering for {deleted: true}
softDelete: false,
// Changes meta fields like 'createdby' and 'updatedby' to store user IDs instead of email addresses
associateUsersById: false,
// Casing for meta fields like 'createdby' and 'updatedby', defaults to 'lower', options are 'lower' | 'camel' | 'snake' | 'pascal' | 'kebab'
metaFieldCasing: 'lower',
// Instead of saving full download url for file, save just relative path and then get download url
// when getting docs - main use case is handling multiple firebase projects (environments)
// and moving/copying documents/storage files between them - with relativeFilePaths, download url
// always point to project own storage
relativeFilePaths: false,
// Add file name to storage path, when set to true the file name is included in the path
useFileNamesInStorage: false,
// Use firebase sdk queries for pagination, filtering and sorting
lazyLoading: {
enabled: false
},
// Logging of all reads performed by app (additional feature, for lazy-loading testing)
firestoreCostsLogger: {
enabled: false,
localStoragePrefix // optional
},
// Function to transform documentData before they are written to Firestore
transformToDb: (resourceName, documentData, documentId) => documentDataTransformed
}
const dataProvider = FirebaseDataProvider(config, options);
const authProvider = FirebaseAuthProvider(config, options);
const firebaseRealtime = FirebaseRealTimeSaga(dataProvider, options);
import * as React from 'react';
import { Admin, Resource } from 'react-admin';
import { PostList, PostShow, PostCreate, PostEdit } from "./posts";
import {
FirebaseAuthProvider,
FirebaseDataProvider,
FirebaseRealTimeSaga
} from 'react-admin-firebase';
const config = {
apiKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
authDomain: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
databaseURL: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
projectId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
storageBucket: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
messagingSenderId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
};
const options = {};
const dataProvider = FirebaseDataProvider(config, options);
...
<Admin
dataProvider={dataProvider}
>
<Resource name="posts" list={PostList} show={PostShow} create={PostCreate} edit={PostEdit}/>
</Admin>
...
Using the FirebaseAuthProvider you can allow authentication in the application.
const dataProvider = FirebaseDataProvider(config);
const authProvider = FirebaseAuthProvider(config);
...
<Admin
dataProvider={dataProvider}
authProvider={authProvider}
>
...
Also checkout how to login with: Google, Facebook, Github etc... (Example Here)
And you might want a "Forgot password" button... (Example Here)
To get the currently logged in user run const user = await authProvider.checkAuth(), this will return the firebase user object, or null if there is no currently logged in user.
NOTE: Realtime updates were removed in react-admin v3.x (see https://github.com/marmelab/react-admin/pull/3908). As such, react-admin-firebase v3.x also does not support Realtime Updates. However, much of the original code used for this functionality in react-admin v2.x remains - including the documentation below. For updates on the implementation of realtime please follow these issues:
Get realtime updates from the firebase server instantly on your tables, with minimal overheads, using rxjs observables!
...
import {
FirebaseRealTimeSaga,
FirebaseDataProvider
} from 'react-admin-firebase';
...
const dataProvider = FirebaseDataProvider(config);
const firebaseRealtime = FirebaseRealTimeSaga(dataProvider);
...
<Admin
dataProvider={dataProvider}
customSagas={[firebaseRealtime]}
>
...
Trigger realtime on only some routes using the options object.
...
const dataProvider = FirebaseDataProvider(config);
const options = {
watch: ['posts', 'comments'],
dontwatch: ['users']
}
const firebaseRealtime = FirebaseRealTimeSaga(dataProvider, options);
...
Monitor file upload data using custom React component which listen for following events (CustomEvent):
FILE_UPLOAD_WILL_STARTFILE_UPLOAD_STARTFILE_UPLOAD_PROGRESSFILE_UPLOAD_PAUSEDFILE_UPLOAD_CANCELDFILE_UPLOAD_COMPLETEFILE_SAVEDAll events have data passed in details key:
fileName: the file anmedata: percentage for FILE_UPLOAD_PROGRESSEvents are sent to HTML DOM element with id "eventMonitor". See demo implementation for example at src-demo/src/App.js;
react-admin-firebase?git clone https://github.com/benwinding/react-admin-firebaseyarnyarn start-demoNow all local changes in the library source code can be tested immediately in the demo app.
To run the tests, either watch for changes or just run all tests.
yarn test-watchyarn testFAQs
A firebase data provider for the React Admin framework
The npm package react-admin-firebase receives a total of 2,276 weekly downloads. As such, react-admin-firebase popularity was classified as popular.
We found that react-admin-firebase demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.