具有真实数据库的Firestore本地http:Cloud Firestore模拟器未运行,因此数据库操作将失败,并显示“默认凭据"错误 [英] Firestore local http with real db: The Cloud Firestore emulator is not running so database operations will fail with a 'default credentials' error

查看:81
本文介绍了具有真实数据库的Firestore本地http:Cloud Firestore模拟器未运行,因此数据库操作将失败,并显示“默认凭据"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在本地运行一个firebase http云功能,以访问一个真正的远程firestore数据库.

I want to run a firebase http cloud function locally accessing a real remote firestore database.

为此,我正在使用以下命令在本地运行函数:

To do it, I'm running my functions locally using:

FIREBASE_CONFIG="/path-to-credential.json" GOOGLE_APPLICATION_CREDENTIALS="/path-to-credential.json" firebase emulators:start --only functions

如此处 https://firebase.google.com/docs/admin/setup ,这应允许在不使用任何参数的情况下初始化admin sdk.我的功能index.js如下

As written here https://firebase.google.com/docs/admin/setup, this should permit the initialization of the admin sdk without any parameter. My functions index.js is as following

import * as admin from 'firebase-admin';
import * as fromHttpFunc from './http/func'; 

admin.initializeApp(); 

export const httpFunc = fromHttpFunc.httpFunc;

然后我在浏览器中调用该函数时,这就是我在日志中得到的信息

When I then call the function in the browser, this is what I get in logs

[warn] ⚠  The Cloud Firestore emulator is not running so database operations will fail with a 'default credentials' error.
[debug] [2019-07-20T13:16:28.656Z] [runtime-status] Ephemeral server survived. {}
[info] >  (node:41939) UnhandledPromiseRejectionWarning: Error: The incoming JSON object does not contain a client_email field
[info] >      at JWT.fromJSON (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/google-auth-library/build/src/auth/jwtclient.js:165:19)
[info] >      at GoogleAuth.fromJSON (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/google-auth-library/build/src/auth/googleauth.js:294:16)
[info] >      at GoogleAuth.getClient (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/google-auth-library/build/src/auth/googleauth.js:476:52)
[info] >      at GrpcClient._getCredentials (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/google-gax/build/src/grpc.js:107:40)
[info] >      at GrpcClient.createStub (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/google-gax/build/src/grpc.js:223:34)
[info] >      at new FirestoreClient (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/@google-cloud/firestore/build/src/v1/firestore_client.js:128:39)
[info] >      at ClientPool.Firestore._clientPool.pool_1.ClientPool [as clientFactory] (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/@google-cloud/firestore/build/src/index.js:315:26)
[info] >      at ClientPool.acquire (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/@google-cloud/firestore/build/src/pool.js:61:35)
[info] >      at ClientPool.run (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/@google-cloud/firestore/build/src/pool.js:114:29)
[info] >      at Firestore.readStream (/Users/michele/dev/clubup/backoffice/firebase/functions/node_modules/@google-cloud/firestore/build/src/index.js:995:26)
[info] >  (node:41939) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
[info] >  (node:41939) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[warn] ⚠  Your function timed out after ~60s. To configure this timeout, see
      https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
[warn] ⚠  Your function timed out after ~60s. To configure this timeout, see
      https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.

我没有发现什么问题,我还通过执行cat /path-to-credential.json检查了证书的路径是否正确,并且我有一个带有client_email字段的json.

I don't get what's wrong, I also checked if the path to the credential is ok by doing cat /path-to-credential.json and I have a json with the client_email field.

推荐答案

通过确保以下各项,使本地云功能可与真正的远程数据库一起使用:

Managed to have the local cloud functions working with the real remote DB by making sure of the following:

  • 运行firebase login并登录到要使用的项目

  • run firebase login and login into the project you want to use

关注此评论 https://github.com/firebase/firebase-functions/issues/121#issuecomment-337065268 以确保文件不存在(我出现了invalid_grant错误)

follow this comment https://github.com/firebase/firebase-functions/issues/121#issuecomment-337065268 to make sure the file is not there (I had a invalid_grant error)

运行export GOOGLE_APPLICATION_CREDENTIALS="SERVICE_ACCOUNT_PATH.json"(替换SERVICE_ACCOUNT_PATH)

run export GOOGLE_APPLICATION_CREDENTIALS="SERVICE_ACCOUNT_PATH.json" in the terminal session you want to use (replace SERVICE_ACCOUNT_PATH)

不是通过使用firebase emulators:start --only functions而是通过使用firebase serve --only functions来服务您的http函数.当前,这是未记录的行为: https://github.com/firebase/firebase-tools/issues/1412#issuecomment-504561828 .

serve your http functions NOT by using firebase emulators:start --only functions but using firebase serve --only functions. Currently, this is an undocumented behaviour: https://github.com/firebase/firebase-tools/issues/1412#issuecomment-504561828.

按如下所示初始化应用程序(更新YOUR_APP_ID):

initialize the app as following (update YOUR_APP_ID):

admin.initializeApp({ credential: admin.credential.applicationDefault() });

admin.initializeApp({ credential: admin.credential.applicationDefault() });

这篇关于具有真实数据库的Firestore本地http:Cloud Firestore模拟器未运行,因此数据库操作将失败,并显示“默认凭据"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆