18

我正在尝试firebase-tools通过 Putty 在远程 Linux 服务器上使用。此服务器上没有运行桌面。

当我运行时firebase login,我会看到一个长网址,我需要将其复制/粘贴到任何其他设备的浏览器中:

https://accounts.google.com/o/oauth2/auth?client_id=xxxxxxxxxxxx.apps.googleusercontent.com&scope=email%20openid%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloudplatformprojects.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ffirebase%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&response_type=code&state=3kkd93kl&redirect_uri=http%3A%2F%2Flocalhost%3A9005

我将其复制/粘贴到本地计算机上的浏览器中,然后使用我的 Google 帐户进行身份验证,然后它会尝试将我重定向到

http://localhost:9005/?state=25744816&code=4/mz.....

这不是在我的机器上运行的实际服务器,也绝对不是远程机器的地址,它甚至没有端口 9005 处于活动状态。

所以结果是终端仍然坐在“等待认证...”

我看到一个名为的命令login:ci,它说它用于非交互式环境,但它似乎与login命令做同样的事情。

我该如何解决这个问题?

4

3 回答 3

57

您可以使用firebase login --no-localhost

然后它将提示您可以从任何浏览器(无论机器)访问的 URL,例如您的主机。

登录url提示响应

像往常一样使用您的 Google 帐户登录并接受许可请求。

最后,复制提供的授权码

您访问的url的授权码

并将其粘贴回远程机器的终端。您应该会收到一条成功消息。

于 2017-05-12T14:30:19.980 回答
1

此处描述了如何为 CI 和无头服务器设置 Firebase 的过程: https ://github.com/firebase/firebase-tools#using-with-ci-systems

Firebase CLI 需要浏览器来完成身份验证,但与 CI 和其他无头环境完全兼容。

  1. 在带有浏览器的机器上,安装 Firebase CLI。
  2. 运行 firebaselogin:ci登录并打印出新的刷新令牌(当前 CLI 会话不会受到影响)。
  3. 以安全但可访问的方式将输出令牌存储在 CI 系统中。

运行 Firebase 命令时,有两种方法可以使用此令牌:

  1. 将令牌存储为环境变量FIREBASE_TOKEN,它将被自动使用。
  2. 在 CI 系统中运行所有带有--token <token>标志的命令。
于 2019-11-27T10:00:57.793 回答
0

Firebase 尊重您的标准 GCP Oauth2 令牌。

必须去浏览器获取代码似乎不是很 CI 或无头。

这对我们有用:

export GOOGLE_APPLICATION_CREDENTIALS=key.json # 其中 key.json 是您的服务帐户 json 文件

export FIREBASE_TOKEN=$(gcloud auth application-default print-access-token)

于 2019-12-05T20:53:27.713 回答