【问题标题】:Firebase Admin and custom token data pass to serverFirebase 管理员和自定义令牌数据传递到服务器
【发布时间】:2017-03-22 12:03:51
【问题描述】:

没有太多关于在Firebase Docs 上创建自己的customToken 的信息。对于初学者开发人员来说,了解如何创建它们以对数据进行排序以供应用程序(ios-swift)中的特定用户访问会很有帮助,例如group1 拥有可以查看数据库特定部分的特定用户。

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

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

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

我不确定是否将登录凭据发送回我的服务器,在那里我将创建一个自定义令牌并将其发送回。但是我该怎么做呢? Firebase Docs 没有具体说明如何。

我设置了一个带有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

我该如何进行?

【问题讨论】:

    标签: node.js firebase firebase-authentication


    【解决方案1】:

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

    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 的原因是节点无法读取文件扩展名。我有同样的问题,这为我解决了它

    【讨论】:

    • 我做了你提到的一切,但我仍然得到同样的错误。
    • 那么问题可能出在代码中的其他地方,很多时候你会抛出错误,但这并不意味着抛出的错误就是你出错的地方。我建议你把你的代码分成几块,看看你哪里出错了。我会从简单的事情开始:
    • var admin = require('firebase-admin'); var serviceAccount = require('./credentials.js'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "cohesive-79cd9.firebaseio.com" }); console.log('应用程序初始化');
    • TypeError: Cannot read property 'cert' of undefined at Object. (/Users/myUserName/Desktop/nodeClient/index.js:25:31) at Module._compile (module.js :409:26) 在 Object.Module._extensions..js (module.js:416:10) 在 Module.load (module.js:343:32) 在 Function.Module._load (module.js:300:12 ) 在 Function.Module.runMain (module.js:441:10) 在启动时 (node.js:139:18) 在 node.js:974:3 更具体地说,这就是我得到的
    【解决方案2】:

    我通过更新 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2020-05-09
      • 2017-04-25
      • 2018-08-23
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多