简体   繁体   中英

Firebase module requires an older version of node while deploying the functions

I want to make a cloud function that uses 'firebase' module (not a 'firebase-functions') And when I'm using or even only import it, npm throws an error:

Error: Error parsing triggers: Failed to load gRPC binary module because it was not installed for the current system
Expected directory: node-v64-darwin-x64-unknown
Found: [node-v79-darwin-x64-unknown]
This problem can often be fixed by running "npm rebuild" on the current system
Original error: Cannot find module '/Users/rame/functions/node_modules/grpc/src/node/extension_binary/node-v64-darwin-x64-unknown/grpc_node.node'
1) If you want to compile the package/file into executable, please pay attention to compilation warnings and specify a literal in 'require' call. 2) If you don't want to compile the package/file into executable and want to 'require' it from filesystem (likely plugin), specify an absolute path in 'require' call using process.cwd() or process.execPath

here's my code on Type script:

 import * as functions from 'firebase-functions';
 import admin = require('firebase-admin');
//the cause of an error     
import * as firebase from 'firebase';
    admin.initializeApp()

    export const getProfilePicture = functions.https.onRequest((request, response) => {
//also there
        const uid = firebase.auth().currentUser?.getIdToken

        const promise = admin.storage().bucket().file('usersPfp/' + uid).getSignedUrl({
            action: 'read',
            expires: '03-09.2441'
        })

        const p2 = promise.then(GetSignedUrlResponse => {
            const data = GetSignedUrlResponse[0]
            return response.send({"data": data})
        })

        p2.catch(error =>{
            console.log(error)
            return response.status(500).send({"error": error})
        })
    })

How to fix that?

What you're doing isn't supported. The Firebase Authentication JavaScript client library isn't supported for use in backend environments like Cloud Functions.

The idea of a current user:

firebase.auth().currentUser

only makes sense in the client app where the user is signed in. It's not something that's known on the backend.

What you can do instead is send the user's ID token from your client to your function, the use the Admin SDK to verify it , then perform some actions on the user's behalf.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM