【问题标题】:admin.auth().setCustomUserClaims "is not a function"admin.auth().setCustomUserClaims “不是函数”
【发布时间】:2018-03-17 03:53:21
【问题描述】:

在运行 Express 的 Firebase Cloud Function 中,当客户端将令牌发布到 setCustomClaims 路由时,我试图设置自定义用户声明。当我在该路由中调用admin.auth().setCustomUserClaims(uid, {admin: true}) 时,我收到一条错误消息,指出这“不是函数”。

我的身份验证提供商是通过 Firebase 身份验证的电子邮件/密码提供商(即我没有创建自定义令牌)。

我是否必须创建自定义令牌才能设置自定义用户声明?

这是我的云功能代码:

const functions = require('firebase-functions');
const admin = require("firebase-admin");
import express from "express"

admin.initializeApp(functions.config().firebase);
const app = express()

app.post('/setCustomClaims', (req, res) => {
    uid = "some-uid"
    admin.auth().setCustomUserClaims(uid, {admin:true}).then(()=> {
        res.end(JSON.stringify( { status: 'success' } ) );
    })
});

export let api = functions.https.onRequest((request, response) => {
  if (!request.path) {
    request.url = `/${request.url}` // prepend '/' to keep query params if any
  }
  return app(request, response)
})

【问题讨论】:

  • 是不是说setCustomUserClaims 不是函数?或者res.end( 错字也出现在您的真实代码中?
  • 确切的错误是:TypeError: admin.auth(...).setCustomUserClaims is not a function。
  • setCustomUserClaims 是最近在version 5.3 of the Firebase Admin SDK for Node.js 中引入的。你能检查一下你使用的是哪个版本的firebase-admin
  • 啊!我正在运行 5.2.1。我现在要更新了。谢谢你,弗兰克。
  • 在 "firebase-admin": "^8.12.1" 它不起作用,我遇到了同样的问题! @sketchedin

标签: javascript firebase firebase-admin


【解决方案1】:
npm install firebase-admin@latest --save

firebase-admin@5.4.3 工作,祝你好运。

注意:客户需要此代码

// Force token refresh. The token claims will contain the additional claims.
firebase.auth().currentUser.getIdToken(true);

【讨论】:

  • 这并没有解决我的问题。我正在使用最新的代码,但仍然没有运气
  • 在 "firebase-admin": "^8.12.1" 它不起作用,我遇到了同样的问题! @Charklewis
【解决方案2】:

在新的 SDK 中,您不再通过新的 Firebase 实例化数据库引用。相反,您将通过 firebase.initializeApp() 初始化 SDK:

之前

var ref = new Firebase("https://databaseName.firebaseio.com");

之后

 // See https://firebase.google.com/docs/web/setup#project_setup for how to

 // auto-generate this config
 var config = {
 apiKey: "apiKey",
 authDomain: "projectId.firebaseapp.com",
 databaseURL: "https://databaseName.firebaseio.com"
 };

 firebase.initializeApp(config);

 var rootRef = firebase.database().ref();>

我在 stackoverflow 上发现了同样的问题,请检查:firebase.database is not a function

【讨论】:

  • 我正在使用 admin.initializeApp(functions.config().firebase); 来初始化 firebase 引用。这还能用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2020-06-20
  • 2019-07-19
  • 1970-01-01
  • 2018-10-18
  • 2022-08-22
相关资源
最近更新 更多