Firebase管理员和自定义令牌数据传递到服务器

时间:2016-11-08 18:33:23

标签: node.js firebase firebase-authentication

关于在Firebase Docs上创建自己的customToken的信息不多。对于初学者开发者来说,知道如何创建它们以便对应用中的特定用户(ios-swift)可访问的数据进行排序将是有帮助的,例如, group1具有可以查看数据库特定部分的特定用户。

就我而言,我在“使用Firebase进行身份验证”的第3步中迷失了

  
      
  1. 当用户登录您的应用时,请将他们的登录凭据(例如,他们的用户名和密码)发送到您的身份验证服务器。您的服务器检查凭据并返回自定义令牌(如果它们有效)。
  2.   

来自:https://firebase.google.com/docs/auth/ios/custom-auth

我不确定将登录凭据发送回我的服务器,在那里我将创建一个自定义令牌并将其发回。但是我该怎么做呢? Firebase文档没有指定方式。

我已使用以下代码设置了node.js的服务器:

var firebase = require('firebase');
var admin = require('firebase-admin');
var FirebaseTokenGenerator = require("firebase-token-generator");
var path = require('path');
var servAcc = '/Users/myUserName/Desktop/nodeClient/service-account.json';

var tokenGenerator = new FirebaseTokenGenerator("firebase-secret");
var token = tokenGenerator.createToken({
uid: "clientId", groupId: "group1", managerId:"MG1"
});

    firebase.initializeApp({

        serviceAccount: path.resolve(__dirname, '/Users/myUserName/Desktop/nodeClient/service-account.json'),
        databaseURL: "https://<app-name>.firebaseio.com/",
        databaseAuthVariableOverride: {
        uid: "clientId"
      }

    })

    admin.initializeApp({
      credential: admin.credential.cert(servAcc),
      databaseURL: "https://apos-accentit.firebaseio.com/"
    });

就在admin.credential.cert(servAcc),我使用nodemon在终端中收到错误。

Cannot read property of 'cert' undefined

我该怎么办?

2 个答案:

答案 0 :(得分:1)

我通过更新firebase-admin解决了这个问题。显然,新的admin.credential.cert()方法是在2016年11月7日使用firebase-admin版本4.0.0添加的。我使用的是一个引用较旧版本的firebase-admin(3.0.0)的教程,该版本是我的package.json文件引用的。一旦我引用了4.0.0。我不再遇到错误。

https://firebase.google.com/support/release-notes/admin/node

答案 1 :(得分:0)

如果您已经为服务凭据下载了json,请创建一个&#39; js&#39;文件名为credentials.js,位于主项目的同一文件夹中。在此文件中创建一个名为凭据的变量,并使其等于您已下载的json作为您的&#39; service-account.json&#39 ;;也不要忘记在文件末尾将其导出为:

module.exports = credentials;

保存此文件,并在主index.js文件的顶部,将名为credentials.js的新创建的文件导入为:

var serviceAccount = require('./credentials.js')

现在使用此变量作为您的凭据。 admin.initializedApp里面应该是这样的:

admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<NAME OF YOUR DATABASE>.firebaseio.com"

});

简而言之。节点无法读取service-account.json的原因是节点无法读取文件扩展名。我有同样的问题,这为我解决了