Модуль Firebase требует более старой версии узла при развертывании функций - PullRequest
0 голосов
/ 21 января 2020

Я хочу создать облачную функцию, которая использует модуль 'firebase' (а не 'firebase-functions'). И когда я использую или даже импортирую ее, npm выдает ошибку:

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

вот мой код на скрипте типа:

 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})
        })
    })

Как это исправить?

1 Ответ

2 голосов
/ 21 января 2020

То, что вы делаете, не поддерживается. Клиентская библиотека Firebase Authentication JavaScript не поддерживается для использования в серверных средах, таких как облачные функции.

Идея текущего пользователя:

firebase.auth().currentUser

имеет смысл только в клиентском приложении. где пользователь выполнил вход. Это не то, что известно в бэкэнде.

Вместо этого вы можете отправить токен идентификатора пользователя из вашего клиента в вашу функцию, используйте Admin SDK для проверки это , затем выполните некоторые действия от имени пользователя.

...