firebase管理节点,权限不足

问题描述

我已经检查了其他堆栈,但是仍然不确定为什么我得到的权限不足错误。可能我没有安全感。

我正在尝试从2个不同的Firebase帐户同步用户。第一个帐户在第二个帐户上调用Firebase函数。如果用户不存在,它将创建并进行一些数据库编制。如果用户存在,则会创建一个自定义令牌,并将其传递回第一个帐户,以在iframe查询参数中使用。

我已经创建了IAM服务帐户,创建了密钥并保存到文件,并像其他堆栈说明一样编辑了服务令牌权限,但是尽管如此,我还是遇到了错误。这是我的功能开始:

const firebaseConfig = {
  credential: admin.credential.applicationDefault(),apiKey: "xxxxxxxxxxxxxxxxxxxxxxx",authDomain: "itsli7-87384.firebaseapp.com",databaseURL: "https://itsli7-87384.firebaseio.com",projectId: "itsli7-87384",storageBucket: "itsli7-87384.appspot.com",messagingSenderId: "503897448704",appId: "1:503897448704:web:45773bfb231a24bbe213e5"
}


fb.initializeApp(firebaseConfig);
admin.initializeApp(firebaseConfig);

函数正在运行。

return admin.auth().getUser(data.user.uid)
      .then(async function () {
        return admin.auth().createCustomToken(data.user.uid)
          .then(function (customToken) {
            res.send(customToken);
          })
          .catch(function (error) {
            console.log('Error creating custom token:',error);
          });

错误

代码:身份验证/权限不足

创建自定义令牌时出错:FirebaseAuthError:调用者没有 获得许可;请参阅 https://firebase.google.com/docs/auth/admin/create-custom-tokens的 有关如何使用和解决功能的更多详细信息。

解决方法

与其使用指定的方法将cred.json添加到admin.credential.applicationDefault(),然后将相同的firebase init配置对象传递给admin init,而是使用以下方法:

var serviceAccount = JSON.parse(fs.readFileSync("cred.json"));

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),databaseURL: "https://itsli7-87384.firebaseio.com"
});

fb.initializeApp(firebaseConfig);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...