You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CLI应用使用Firebase Authentication对终端用户身份验证

解决方案:CLI应用接入Firebase Authentication实现终端用户登录

问题答疑

  • 关于signInWithPopup仅支持浏览器环境的疑问:没错,signInWithPopup、signInWithRedirect这类方法完全依赖浏览器的DOM、弹窗、路由跳转API,Node.js运行环境没有这些能力,所以一定会抛出operation-not-supported-in-this-environment错误
  • 关于firebase全局命名空间的使用:这个是v8及更早版本Firebase JS SDK的用法,v9开始默认采用模块化导入设计,不再暴露全局firebase对象。如果要兼容旧写法,可以导入兼容包:
import firebase from 'firebase/compat/app'
import 'firebase/compat/auth'
// 初始化后就可以使用firebase.auth()的写法

不过兼容包属于过渡方案,后续版本会逐步移除,不推荐长期使用。

  • 关于v9 SDK与旧版Node.js SDK差异报错:你出现ReferenceError: firebase is not defined就是因为v9默认没有全局对象,要么按上面的方法用兼容包,要么完全遵循v9的模块化语法编写代码,不要混用新旧两种写法。

为什么Ruby、AppAuth JS方案无法生成Firebase用户

你之前的方案只是完成了Google账号的OAuth认证,拿到的是Google平台的凭证,没有和Firebase Auth体系做对接。Firebase要求你必须将第三方身份提供商的凭证传给Firebase的认证接口,它才会在项目的Authentication用户表中创建/匹配用户记录,同时返回属于Firebase体系的访问凭证。

可行的实现方案(遵循RFC8252 Native App OAuth流程)

不需要依赖Firebase JS SDK的客户端认证能力,直接通过OAuth流程+Firebase REST接口实现即可,步骤如下:

  1. 前置准备:在Firebase控制台「Authentication」-「登录提供商」-「Google」设置中,获取Web客户端ID、Web客户端密钥,同时记录Firebase项目的公开API key。
  2. 执行friendly_chat login命令时,CLI先在本地启动一个临时HTTP服务,监听随机闲置端口,用于接收OAuth回调的授权码。
  3. 拼接Google OAuth授权页URL,参数中redirect_uri填写http://localhost:<临时端口>,client_id填写上一步获取的Firebase Web客户端ID,scope至少包含openid、email、profile。
  4. 调用系统默认浏览器打开上述授权URL,用户在浏览器中完成Google登录授权后,Google会自动回调到本地临时HTTP服务,返回授权码。
  5. 用拿到的授权码请求Google的token接口,换取Google的id_token和access_token。
  6. 调用Firebase Auth的signInWithIdp REST接口,传入Google的id_token、providerId: "google.com"、requestUri填本地回调地址、Firebase项目API key,接口会返回Firebase体系的idToken(访问凭证)、refreshToken(刷新凭证)以及用户基础信息,同时Firebase会自动在用户表中创建/匹配对应用户。
  7. 将idToken、refreshToken、用户信息存储到本地用户目录的配置文件中(例如~/.friendly_chat/auth_config.json),后续CLI调用业务接口时携带idToken即可,凭证过期时用refreshToken调用Firebase的token刷新接口更新凭证即可。

内容的提问来源于stack exchange,提问作者Craftonix - AA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:36:08