首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >只提供函数,除非手动设置admin.auth(),否则key.json ()本地不工作

只提供函数,除非手动设置admin.auth(),否则key.json ()本地不工作
EN

Stack Overflow用户
提问于 2017-07-12 19:14:08
回答 1查看 994关注 0票数 2

我正在尝试使用firebase serve --only functions在本地运行云函数。如果我在这里通过firebase控制台创建服务帐户时手动指定下载的key.json:https://console.firebase.google.com/project/project-id/settings/serviceaccounts/adminsdk,它就能工作。然后做export GOOGLE_APPLICATION_CREDENTIALS=key.json。我为什么要这么做?firebase或gcloud不应该正确地处理这个问题吗?我以为在functions.config().firebase的证件是ApplicationDefault。https://developers.google.com/identity/protocols/application-default-credentials。根据这一点,像上面这样的env变量首先被选中,所以如果有,它就能工作。但#2不应该证明我是正确的吗?

我有应用程序引擎的gcloud,所以我已经完成了gcloud initgcloud auth application-default login

我用index.js初始化我的应用程序

代码语言:javascript
代码运行次数:0
运行
复制
const admin = require('firebase-admin');
const functions = require('firebase-functions');

admin.initializeApp(functions.config().firebase);

firebase serve --only functions很好地部署了这些函数。但是,当我执行一个使用此代码admin.auth().getUser(uid)...的代码时,它会出现以下错误:

错误:发生了内部错误。原始服务器响应:“{”错误“:{”错误“:[{”域“:”usageLimits“,”原因“:”accessNotConfigured“,”消息“:”访问未配置“。API以前没有在项目7640.50中使用,或者是禁用的。通过访问https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=7640...50来启用它,然后重试。如果您最近启用了这个API,请等待操作传播到我们的系统并重试.“,”,"extendedHelp":"https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=7640...50"}],“代码”:403,“消息”:“访问未配置”。API以前没有在项目7640.50中使用,或者是禁用的。通过访问https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=7640...50来启用它,然后重试。如果最近启用了此API,请等待操作传播到我们的系统并重试几分钟。

项目编号不对应于我的firebase项目或console.cloud.google.com中的项目id/编号

如果没有gcloud,我会得到这个错误。

错误:通过“凭据”属性提供给initializeApp()的凭据实现无法获取有效的Google OAuth2访问令牌,并出现以下错误:“错误获取访问令牌: invalid_grant (令牌已过期或撤消。)”。有两个可能的原因:(1)您的服务器时间没有正确同步,或者(2)您的证书密钥文件已被撤销。要解决(1),请重新同步服务器上的时间。要解决(2),请确保您的密钥文件的密钥ID仍然存在于https://console.firebase.google.com/iam-admin/serviceaccounts/project中。如果没有,在/settings/serviceaccounts/adminsdk生成一个新的密钥文件

类似于https://github.com/urish/firebase-server/issues/81

我已经生成了一个密钥文件。我已经尝试过删除现有的,并创建新的,唯一的解决方案是下载生成的密钥并手动导出环境变量

还有别的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-27 18:24:57

从技术上讲,是的,但您可以构建代码,以便在本地测试时使用本地密钥,在服务器上运行时使用服务密钥。

为此,我将env var FB_SERVICE_ACCOUNT_KEY设置为json秘密的路径。当未设置它(即部署在Firebase函数中)时,将使用标准init。

下面是一个基本的例子

代码语言:javascript
代码运行次数:0
运行
复制
if(process.env.FB_SERVICE_ACCOUNT_KEY){
    var serviceAccount = require(process.env.FB_SERVICE_ACCOUNT_KEY);
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: `https://${process.env.GCLOUD_PROJECT}.firebaseio.com`
    });
}
else{
    admin.initializeApp(functions.config().firebase);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45065826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档