This demo shows how to set up the basics of a serverless Firebase application that uses Firebase Authentication, Hosting, and Google Cloud Functions.
The Function with code code in the functions directory demonstrates a Cloud Function protected by Firebase Authentication and responds with a simple 'Hello '. Only users who pass a valid Firebase ID token as a Bearer token in the Authorization
header of the HTTP request or in a __session
cookie are authorized to use the Cloud Function. Checking the ID token is done with an ExpressJs middleware.
The Hosting site with code in the public directory lets you sign-in with Google Authentication and initiates the authorized call to the Function.
- Create a Firebase Project using the Firebase Console.
- Enable the Google Provider in the Auth section.
- Ensure that the Support Email within the Firebase Project Settings is configured, or authentication will fail with a 'restricted_client' error.
- Clone or download this repo.
- You must have the Firebase CLI installed. If you don't have it install it with
npm install -g firebase-tools
and then configure it withfirebase login
. - Configure the CLI locally by using
firebase use --add
and select your project in the list. - Install dependencies locally by running:
cd functions; npm install; cd -
To test locally do:
- Start serving your project locally using
firebase serve --only hosting,functions
- Open the app in a browser at
http://localhost:5000
. - Sign in the web app in the browser using Google Sign-In and two authenticated requests will be performed from the client and the result will be displayed on the page, normally "Hello ".
To deploy and test on prod do:
- Deploy your project using
firebase deploy
- Open the app using
firebase open hosting:site
, this will open a browser. - Sign in the web app in the browser using Google Sign-In and two authenticated requests will be performed from the client and the result will be displayed on the page, normally "Hello ".
The code within this repository utilizes sample code from: firebase / functions-samples / authorized-https-endpoint