Secure HTTP trigger for Cloud Functions for Firebase

前端 未结 2 1436
栀梦
栀梦 2020-12-05 11:38

Is there a way to check if a user is firebase-authorized before triggering a cloud function? (Or within the function)

2条回答
  •  被撕碎了的回忆
    2020-12-05 12:17

    Yes. You will need to send the Firebase ID token along with the request (for example in the Authorization header of an AJAX request), then verify it using the Firebase Admin SDK. There is an in-depth example in the Cloud Functions for Firebase samples repository. It looks something like this (made shorter for SO post):

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    const cors = require('cors')();
    
    const validateFirebaseIdToken = (req, res, next) => {
      cors(req, res, () => {
        const idToken = req.headers.authorization.split('Bearer ')[1];
        admin.auth().verifyIdToken(idToken).then(decodedIdToken => {
          console.log('ID Token correctly decoded', decodedIdToken);
          req.user = decodedIdToken;
          next();
        }).catch(error => {
          console.error('Error while verifying Firebase ID token:', error);
          res.status(403).send('Unauthorized');
        });
      });
    };
    
    exports.myFn = functions.https.onRequest((req, res) => {
      validateFirebaseIdToken(req, res, () => {
        // now you know they're authorized and `req.user` has info about them
      });
    });
    

提交回复
热议问题