Firebase: 如何从Android和iOS验证Google登录令牌ID

3

我希望在我的节点后端验证从我的Android应用程序获取的所有令牌(Google登录)。我首先通过以下方式初始化firebase模块:

var admin = require('firebase-admin');
var serviceAccount = require('googlefirebase');
admin.initializeApp({
   credential: admin.credential.cert(serviceAccount),
   databaseURL: url
});

这个代码给了我一个有关"DEFAULT"名称的错误提示,后来我发现需要使用这段代码来解决:
var admin = require('firebase-admin');
var serviceAccount = require('googlefirebase');
admin.initializeApp(functions.config().firebase);

然后我意识到需要在我的服务器上安装和初始化这个项目,所以我执行了以下操作:

firebase login
firebase init
firebase use --add project
firebase functions:config:set "google-services.json" (just the project_info data of the json that i downloaded from firebase)

现在我遇到了这个错误:

错误:必须使用证书凭据初始化应用程序,或将您的Firebase项目ID设置为GOOGLE_CLOUD_PROJECT环境变量,以调用verifyIdToken()

编辑开始 当我调用以下函数时,出现此错误:

admin.auth().verifyIdToken(token).then(function(decodedToken) {}.catch(){};

我已经“init”了Firebase(至少我认为是这样),并创建了环境变量:GOOGLE_CLOUD_PROJECT和FIREBASE_CONFIG,但仍然收到相同的错误。

那么,让Firebase正常工作的正确方法是什么?我错过了什么?verifyIdToken是否是验证令牌的正确方法?我只想验证Google登录令牌。

2个回答

1
使用Firebase的Cloud Functions时,不再需要像这样进行初始化:
admin.initializeApp(functions.config().firebase);

你应该不使用任何参数:

admin.initializeApp();

此外,您的google-services.json文件在Cloud Functions中没有用处。它仅适用于Android应用程序。

那我该如何告诉Firebase我正在哪个项目上工作?你能看到我的编辑吗? - Fernando Santiago
项目名称取自环境变量,该变量会自动填充正确的值。查看任何使用Admin SDK的官方示例 - 它们都不带参数进行初始化(除非在某些情况下需要特殊配置),文档也证实了这一点。 - Doug Stevenson

0

你应该拥有一个名为 FIREBASE_CONFIG 的环境变量,然后调用它。

// Initialize the default app
var admin = require('firebase-admin');
var app = admin.initializeApp();

该配置变量包含初始化信息,例如:

      databaseURL: 'https://databaseName.firebaseio.com',
     storageBucket: 'projectId.appspot.com',
     projectId: 'projectId' 

实际上,我的FIREBASE_CONFIG变量包含了存储所有信息的.json文件的路径。 - Fernando Santiago
FIREBASE_CONFIG会在Cloud Functions中自动设置。 - Doug Stevenson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接