Firebase Storage Downloading Image CORS error [JavaScript] [duplicate] - javascript

This question already has an answer here:
Firebase - Request header field x-firebase-gmpid is not allowed by Access-Control-Allow-Headers in preflight response
(1 answer)
Closed 2 years ago.
When I run the code below, I got CORS error and any help would be greatly appreciated. Thanks
I tried a few answers in this topic here in StackOverflow but nothing helped me.
// Your web app's Firebase configuration
var firebaseConfig = {
apiKey: "**********",
authDomain: "********",
databaseURL: "********",
projectId: "********",
storageBucket: "********",
messagingSenderId: "********",
appId: "********",
measurementId: "********"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
var storage = firebase.storage();
var storageRef = storage.ref('image');
var starRef = storageRef.child('image1.jpg');
starRef.getDownloadURL().then(url => {
console.log(url);
})

Your calls to Firebase should be done server-side. Your server acts as a kind of pass-through. 2 reasons:
The browser prevents you from getting data from any server but your own
In order to call Firebase from the client side you have to have your credentials on the client side, which is seriously risky.
So from the client side call /images/image1.jpg
And from the server call Firebase and send the image1 back to the browser.
It's a lot of work, but that's the right way.

Related

I am seeing following error while trying to add firebase analytics

I have linked firebase analytics to the firebase project recently but I am getting the following error in my console and nothing is visible in the firebase analytics Dashboard even.
[2022-04-11T06:07:13.736Z] #firebase/analytics: The measurement ID in the local
Firebase config (G-XXXXXXXXX) does not match the measurement ID fetched from the
server (undefined). To ensure analytics events are always sent to the correct Analytics
property, update the measurement ID field in the local config or remove it from the
local config.
This is how I am adding analytics
const firebaseConfig = {
apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
authDomain: "*****************",
projectId: "********",
storageBucket: "*********",
messagingSenderId: "********",
appId: "*******************************",
measurementId: "G-XXXXXXXXX"
};
const app = firebase.initializeApp(firebaseConfig)
const auth = getAuth(app)
const db = getFirestore(app)
firebase.analytics()
const analytics = getAnalytics(app);
console.log(analytics)
Can anyone help what exactly I am missing? Any help is appreciated.
If anyone sees this error, then in my case issue was I have implemented firebase analytics after creating the project not while creating. SO it took 24 hours to reflect. And after 24 hours everything was working.

FCM Web Push Message: Show Notification only when Website is closed (not in background)

My serviceworker looks as follows:
importScripts("https://www.gstatic.com/firebasejs/8.3.1/firebase-app.js");
importScripts("https://www.gstatic.com/firebasejs/8.3.0/firebase-messaging.js");
var firebaseConfig = {
apiKey: '%GCM_NOTIFICATION_APIKEY%',
authDomain: '%GCM_NOTIFICATION_AUTHDOMAIN%',
projectId: '%GCM_NOTIFICATION_PROJECTID%',
storageBucket: '%GCM_NOTIFICATION_STORAGEBUCKET%',
messagingSenderId: '%GCM_NOTIFICATION_MESSAGINGSENDERID%',
appId: '%GCM_NOTIFICATION_APPID%',
measurementId: '%GCM_NOTIFICATION_MEASUREMENTID%'
};
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.onBackgroundMessage(function(payload) {
});
With the serviceworker you've see above iam getting a Notification when my tab/browser is in background.
Is it possible to get a notification only when the Website is closed?
Why at all iam getting a notification from the browser? The onBackgroundMessage callback is empty. Iam not calling showNotification()...
Thank you for your help!

I am very confused on how to include Firebase into html

I recently started integrating firebase into my html project, i installed firebase-tools using npm and initialized the project, but then after I included all the scripts mentioned on the firebase website, I used firebase.auth() to sign in the user, then I got an error that firebase is undefined, so I inserted these script tags into my code:
<script src="https://www.gstatic.com/firebasejs/7.13.1/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/firebase/init.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.13.1/firebase-app.js"></script>
<!-- If you enabled Analytics in your project, add the Firebase SDK for Analytics -->
<script src="https://www.gstatic.com/firebasejs/7.13.1/firebase-analytics.js"></script>
<!-- Add Firebase products that you want to use -->
<script src="https://www.gstatic.com/firebasejs/7.13.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.13.1/firebase-firestore.js"></script>
and below these I had my firebase config:
<script>
// Your web app's Firebase configuration
var firebaseConfig = {
apiKey: "MY_API_KEY",
authDomain: "MY_PROJECT.firebaseapp.com",
databaseURL: "https://MY_PROJECT.firebaseio.com",
projectId: "MY_PROJECT",
storageBucket: "MY_PROJECT.appspot.com",
messagingSenderId: "MESSAGER_ID",
appId: "MY_APP_ID",
measurementId: "MEASUREMENT_ID"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
firebase.analytics();
</script>
<script>
async function signIn(email, password){
await firebase.auth().signInWithEmailAndPassword({
email,
password
}).then(() => {window.location.href = "HomeScreen.html"}).catch((err) => {
document.getElementById('FailedSignIn').style.display = "flex";
})
}
</script>
And then I got these errors:
[2020-03-30T17:24:20.332Z] #firebase/app: Warning: Firebase is already defined in the global scope. Please make sure Firebase library is only loaded once.
Website.htmlAccess to fetch at 'https://firebaseinstallations.googleapis.com/v1/projects/MY_PROJECT/installations' from origin 'http://localhost:63342' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
https:/…base-analytics.js:1POST https://firebaseinstallations.googleapis.com/v1/projects/MY_PROJECT/installations net::ERR_FAILED
TypeError: Failed to fetch
So I would really appreciate some clarification of the ordering of these script tags, as well as how to properly initialize firebase and use it in my file without any errors.
After you’ve created your account and the Firebase project, all you need to do is add the JavaScript code to your HTML, as described in the Setup Docs
<script src="https://www.gstatic.com/firebasejs/4.0.0/firebase.js"></script>
<script>
// Initialize Firebase
// TODO: Replace with your project's customized code snippet
var config = {
apiKey: "<API_KEY>",
authDomain: "<PROJECT_ID>.firebaseapp.com",
databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
storageBucket: "<BUCKET>.appspot.com",
messagingSenderId: "<SENDER_ID>",
};
firebase.initializeApp(config);
// Get a reference to the database service
var database = firebase.database();
// update the variable when the starCount is changed in the database
var starCountRef = database.ref('posts/' + postId + '/starCount');
starCountRef.on('value', function(snapshot) {
updateStarCount(postElement, snapshot.val());
});
// update the UI
function updateStarCount(el, val) {
el.innerHtml(`${val} Stars!`);
}
</script>
Then you can continue to learn about Realtime Database here
The Javascript/Node.JS SDK is introduced here.
How do you start your local web-server at http://localhost:63342?
Maybe you just have to start your web-server with using CORS request headers for external requests.
Example:
yarn serve --cors

Firebase invalid api key error in console

I use Firebase-auth for my web application I'm developing with electron framework. I created an API key using project settings, and copied it into my html's body as it is suggested in Firebase guide. However, when I open the HTML page on the browser, console shows the following error.
code: "auth/invalid-api-key"
message: "Your API key is invalid, please check you have copied it correctly."
__proto__: Error
Bottom part of the body of the HTML page is as follows.
<script src="https://www.gstatic.com/firebasejs/5.8.2/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "AIzaSyAXXXXXXXXXXXXXXXXXXXXjILO32ZDxRKY",
authDomain: "jumbleup-773da.firebaseapp.com",
databaseURL: "https://jumbleup-773da.firebaseio.com",
projectId: "jumbleup-773da",
storageBucket: "jumbleup-773da.appspot.com",
messagingSenderId: "971123072180"
};
firebase.initializeApp(config);
</script>
Note: I obfuscated the real key by changing 20 digits of it by X.
Your API key is invalid, please check you have copied it correctly
This error can be showed for many reasons. I want to explain how I resolved this issue.
Firstly, I copied firebaseConfig variable clicking copy button for my website and kept it under my source folder making a file named firebase.config.js.
export const firebaseConfig = {
apiKey: 'AIzaSxxxxxxxxxxxxxxxxxxxxxxx',
authDomain: 'fir-axxxxxxxxxxxxxxxxxxxxxxxxxx',
projectId: 'fir-axxxxxxxxxxxxxxxxx',
storageBucket: 'fir-axxxxxxxxxxxxxxxxxx',
messagingSenderId: '106xxxxxxxxxxxxxx',
appId: '1:1064xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
};
Secondly, I called firebaseConfig variable by importing it in my App.js file.
import { firebaseConfig } from './firebase.config';
Finally, I used this variable in this line below.
firebase.initializeApp(firebaseConfig);
If you get something helpful from this solution please press on upvote. Thank you.
First of all install firebase and then
Import firebase at first as import firebase from 'firebase'; or in js script.
The below code is used to connect the app to firebase this includes the id and all the details to connect firebase.
const config ={
apiKey: "XXXXXXXXXXXX",
authDomain: "app.firebaseapp.com",
databaseURL: "https://app.firebaseio.com",
projectId: "XXXXXX2",
storageBucket: "XXXXXX.appspot.com",
messagingSenderId: "5..........",
appId: "1:52807............."
}
firebase.initializeApp(config);
export default firebase;
I am using React.
I was also getting the same error because in my .env file I had , present after the declaration.
Before:
REACT_APP_API_KEY="AIXXXXXXXXXXXX",
After:
REACT_APP_API_KEY="AIXXXXXXXXXXXX"
export const environment = {
production: false,
firebaseConfig: {
apiKey: "AIzxxxxxxxxxxxxxxxxxxxxxxx",
authDomain: "chxxxxxxxxxxxxxx",
projectId: "chxxxxxxxxxxxxxxxx",
storageBucket: "chxxxxxxxxxxxxxxxx",
messagingSenderId: "7xxxxxxxxxxxxxxx",
appId: "1:7xxxxxxxxxxxxxxxxxxxxxxxxx",
measurementId: "G-xxxxxxxxx"
}
};
add this in your environment.ts
First of all...
Make sure that you copied the key correctly.
If you are confirmed you copied correctly and rest of the stuffs are ok but still Error is showing...
then just close all of your files and log out from you Gmail account
and then Login again and open your files and folder.
Hopefully it will work.
In my case... it worked as I said.
After firebase configuration like this :
const firebaseConfig = {
apiKey:process.env.REACT_APP_apiKey,
authDomain:process.env.REACT_APP_authDomain,
projectId:process.env.REACT_APP_projectId,
storageBucket:process.env.REACT_APP_storageBucket,
messagingSenderId:process.env.REACT_APP_messagingSenderId,
appId:process.env.REACT_APP_appId,
}
You may stop the server by Ctrl + c => y and again run the server (npm start). It will work.
I'm also getting such error and after following this my code running well. You may try, hope it will helpful for you.
If you use Vite with Firebase,use the following pattern
const firebaseConfig = {
apiKey: import.meta.env.REACT_APP_API_KEY,
authDomain: import.meta.env.REACT_APP_AUTH_DOMAIN,
projectId: import.meta.env.REACT_APP_PROJECT_ID,
storageBucket: import.meta.env.REACT_APP_STORAGE_BUCKET,
messagingSenderId: import.meta.env.REACT_APP_MESSAGE_SENDER_ID,
appId: import.meta.env.REACT_APP_APP_ID,
};
I have a similar error. How I Solve it:
I saw this when I created a .env file in the react project. it needs to restart the app again and everything works perfectly.
So the Solution is, Press Ctrl + c then y and again start it npm start or whatever you used.

Sending data to Firebase database from Javascript

I am very new in javascript and Firebase Database, and I cant quite comprehend how to send data to my database from it. I am sending data from an html document and I know how to record the information in to a variable, but now I want to send it to firebase and I dont know how to initialize the Firebase Database from Javascript. Thank you.
You need to use JavaScript SDK of Firebase.
Configure you app first.
<script src="https://www.gstatic.com/firebasejs/4.5.0/firebase.js"></script>
<script>
// Initialize Firebase
// TODO: Replace with your project's customized code snippet
var config = {
apiKey: "<API_KEY>",
authDomain: "<PROJECT_ID>.firebaseapp.com",
databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
storageBucket: "<BUCKET>.appspot.com",
messagingSenderId: "<SENDER_ID>",
};
firebase.initializeApp(config);
</script>
To read data:
firebase.database().ref('/list').once('value').then(function(data) {
// ...
});
read this documentation for more details:
Add Firebase to your JavaScript Project

Categories

Resources