标签: firebase-admin

Firebase Admin SDK 用于下载/检索 Google Cloud Storage 上的文件

我正在尝试下载一些已上传到 Google Cloud Storage(也称为存储桶)的图像。我无法在我的任何const storage或上使用 .ref() 方法const bucket,因为它们是管理 SDK 的一部分。admin.storage 只有方法 .bucket() ( https://firebase.google.com/docs/reference/admin/node/admin.storage.Storage )。

\n\n

我能够访问存储桶。\nbucket.getFiles() 有效,结果是一个包含大量元数据(如文件名、存储桶所有者等)的文件对象数组。如何从云存储中获取图像并将其插入到 html 对象中?

\n\n

\r\n
\r\n
var admin = require("firebase-admin");\r\n\r\nvar serviceAccount = require("./randomDB-f12d3-admin-correctly-working.json");\r\n\r\nadmin.initializeApp({\r\n  credential: admin.credential.cert(serviceAccount),\r\n  databaseURL: "https://randomDB-f12d3.firebaseio.com",\r\n  storageBucket: "randomDB-f12d3.appspot.com"\r\n});\r\n\r\nconst gcs  = require("@google-cloud/storage");\r\ngcs.projectId = "randomDB-f12d3";\r\ngcs.keyFilename = "randomDB-f12d3-firebase-admin-correctly-working.json";\xef\xbb\xbf\r\n\r\nexports.getFile = functions.https.onRequest((req, res) => {\r\n  \r\n  cors(req, res, () => {\r\n    if (req.method !== "GET") {\r\n      return res.status(500).json({\r\n        message: "Not allowed"\r\n      });\r\n    }\r\n\r\n    const storage = admin.storage();\r\n    const bucket = admin.storage().bucket();\r\n\r\n    bucket.getFiles().then((result)=>{\r\n      \r\n …
Run Code Online (Sandbox Code Playgroud)

javascript google-cloud-storage firebase reactjs firebase-admin

4
推荐指数
1
解决办法
9975
查看次数

如何比较firebase时间戳?

我有这样的云函数代码代码:

console.log(`ts: ${(element.get('expire') as admin.firestore.Timestamp).toDate().toUTCString()} now: ${admin.firestore.Timestamp.now().toDate().toUTCString()}`)
const greater = (element.get('expire') as admin.firestore.Timestamp) > admin.firestore.Timestamp.now()
const lower = (element.get('expire') as admin.firestore.Timestamp) < admin.firestore.Timestamp.now()
console.log(`greater: ${greater} lower: ${lower}`)
Run Code Online (Sandbox Code Playgroud)

在控制台中:

ts:格林威治标准时间 2019 年 4 月 8 日星期一 20:59:59 现在:格林威治标准时间 2019 年 3 月 8 日星期五 20:19:18 GMT

较大:假 较低:假

那么如何正确地与时间戳进行比较?

javascript firebase firebase-admin google-cloud-firestore

4
推荐指数
2
解决办法
9647
查看次数

如何使用 java Firebase Admin SDK 向数据消息添加分析标签?

自 7 月 1 日起,Firebase 要求为消息添加标签,以便分析显示数据消息发送的数量等。

'从 2019 年 7 月 1 日星期一开始,您将能够通过分析标签过滤数据。在该日期之后,没有分析标签发送的数据消息可能不会出现在此仪表板中。

问题是 firebase here提供的文档链接没有帮助。当我使用在 Java 应用引擎实例上运行的 Firebase Admin SDK 时,它仅指 HTTP 请求。

这是我当前用于发送数据消息的代码的准系统。我如何调整它以发送带有分析标签的消息?

Message message = Message.builder()
                .putData("data",data)
                .setToken(deviceID)
                .build();


        String response = FirebaseMessaging.getInstance().send(message);
Run Code Online (Sandbox Code Playgroud)

java firebase firebase-cloud-messaging firebase-analytics firebase-admin

4
推荐指数
1
解决办法
3406
查看次数

firebase-admin:获取失败通知传递结果的令牌

假设我们想要向两个注册令牌(仅限 Android 设备,无 iOS)发送通知,如下所示:

const tokens = ['tokenA', 'tokenB'];

const payload = {badge: 1, title: 'Hello', body: 'world'};
const options = {priority: 'high',contentAvailable: false, timeToLive: 60 * 60 * 24};

const admin = FirebaseAdmin.initializeApp({/*config here...*/});

admin.messaging().sendToDevice(deviceTokens, payload, options)
  .then((response) => {

    response.results.forEach((deviceResult) => {
      if (deviceResult.error) {
        console.log('Delivery failed. Showing result:\n', deviceResult);
      }
    });

});
Run Code Online (Sandbox Code Playgroud)

设备曾经注册过的用户已从tokenB其设备中删除了该应用程序。因此,该令牌不再在 firebase 中注册。错误对象如下所示:

Delivery failed. Showing result:


{"error":
  {
    "code":"messaging/registration-token-not-registered",
    "message":"The provided registration token is not registered. A previously valid registration token can …
Run Code Online (Sandbox Code Playgroud)

push-notification node.js firebase-admin

4
推荐指数
1
解决办法
2109
查看次数

Firestore 存储中的文件元数据未更新

我创建了一个云函数,它会在 Firebase 存储中的任何新文件上传时触发。一旦成功上传,函数将更新其元数据,但即使使用“setMetadata()”设置新元数据也未得到应用。过程中没有错误,但在检查更新的元数据时,新的元数据没有反映。

exports.onImageUpload = functions.storage.object().onFinalize(async (object) => {  
  const storageRef = admin.storage().bucket(object.bucket);

  var metadata = {
      'uploader': 'unknown'   
  }

  await storageRef.file(object.name).setMetadata(metadata).then(function(data) {
    console.log('Success');
    console.log(data);
    return;
  }).catch(function(error) {
    console.log(error);
    return ;
  });
  return;
}); 
Run Code Online (Sandbox Code Playgroud)

没有错误,并且在 Cloud Function 上记录了其打印的“成功”消息。此外,“metageneration: '2'”属性也得到了更新,这意味着它应该使用新值更新元数据,但它没有。

javascript firebase google-cloud-functions firebase-storage firebase-admin

4
推荐指数
1
解决办法
1056
查看次数

如何在firebase云函数中指定声音和click_action

我尝试使用以下功能(node.js v8):

exports.sendComNotification = functions.firestore
  .document('Comunicados/{comID}')
  .onUpdate((snap, context) => {
    console.log('Com triggered');
    const newValue = snap.after.data();
    const msg = newValue.title;
    var message = {
      notification: {
        title: 'Comunicado da Diretoria!',
        body: msg,
        badge: '1',
        sound: 'default',
        click_action: 'FLUTTER_NOTIFICATION_CLICK',
      },
      topic: "Comunicados"
    };
    return admin.messaging().send(message)
      .then((response) => {
        console.log('Successfully sent message:', response);
        return
      })
      .catch((error) => {
        console.log('Error sending message:', error);
        return
      });

  });
Run Code Online (Sandbox Code Playgroud)

但这会在 fucntions 日志中出现以下错误:

Error sending message: {
    Error: Invalid JSON payload received.Unknown name "badge"
    at 'message.notification': Cannot …
Run Code Online (Sandbox Code Playgroud)

google-cloud-functions firebase-cloud-messaging firebase-admin

4
推荐指数
1
解决办法
1244
查看次数

使用 Secret Manager 中存储的密钥初始化 Firebase Admin SDK

我正在尝试使用单独的服务帐户(即不是默认服务帐户)在 Cloud Run 应用程序中初始化 Firebase Admin SDK。

文档建议:

import firebase_admin
from firebase_admin import credentials

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)
Run Code Online (Sandbox Code Playgroud)

但是,我想避免将机密打包到 Cloud Run 容器中,因此我从 Secret Manager 检索 json 文件,并尝试创建凭据,并将其传递到: firebase_admin.initialize_app(cred)

import firebase_admin
from google.cloud import secretmanager
from google.oauth2 import service_account

# Create credentials object then initialize the firebase admin client
sec_client = secretmanager.SecretManagerServiceClient()
name = sec_client.secret_version_path(GOOGLE_CLOUD_PROJECT_NUMBER, FIREBASE_SA_SECRET_NAME, "latest")
response = sec_client.access_secret_version(name)
service_account_info = json.loads(response.payload.data.decode('UTF-8'))
creds = service_account.Credentials.from_service_account_info(service_account_info)
firebase_admin.initialize_app(creds)
Run Code Online (Sandbox Code Playgroud)

收到错误:

ValueError:提供了非法的 Firebase 凭据。应用程序必须使用有效的凭证实例进行初始化。

任何提示表示赞赏。

python firebase firebase-admin

4
推荐指数
1
解决办法
5352
查看次数

没有 Cloud Functions 的 Firebase 自定义声明

有没有一种方法可以创建自定义索赔而无需通过云功能?

我真的只需要为几个帐户设置它,我目前的计划是 Spark。我现在还不能升级。但我需要测试此功能以实现基于角色的身份验证。

谢谢,请尽可能详细,因为我是 firebase cli 的新手。

firebase firebase-authentication google-cloud-functions firebase-admin

4
推荐指数
1
解决办法
1294
查看次数

如何使用 firebase admin 捕获 firebase 身份验证错误

我有以下尝试捕获

try {
  user = await admin.auth().getUserByEmail(inputEmail);
} catch (error) {
  if(error.code !== "auth/user-not-found") throw new Error("authentication failed");
}
Run Code Online (Sandbox Code Playgroud)

但我收到一条错误消息

Object is of type 'unknown'.
Run Code Online (Sandbox Code Playgroud)

关于错误代码

这段代码之前工作得很好。如何解决这个问题?

我找到了这个

https://firebase.google.com/docs/reference/js/v8/firebase.FirebaseError

但我不知道可以从哪里导入它。

在此输入图像描述

我尝试将any指定为类型 在此输入图像描述

我尝试检查错误是否是 Error 的一个实例,其中显示

Property 'code' does not exist on type 'Error'.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

node.js firebase typescript google-cloud-functions firebase-admin

4
推荐指数
1
解决办法
3254
查看次数

Firebase getAuth() 抛出未定义的 getProvider 错误,但可以访问数据库

我在节点服务器上运行以下代码。

import admin from 'firebase-admin';
import {getAuth} from 'firebase/auth';
class MyFirebase {

   constructor() {
     console.log("MyFirebase Constructor");
     this.firebaseApp = admin.initializeApp({
          credential: admin.credential.cert("PATH_TO_CERT/cert.json"),
          databaseURL: "https://DATABASE_URL",
      });
      
      console.log("App name="+firebaseApp.name);

      this.defaultAuth = getAuth(firebaseApp);
      this.database = this.firebaseApp.database();
      // database ref code here...
   }
}
Run Code Online (Sandbox Code Playgroud)

它会抛出以下错误:

返回 app.container.getProvider(name); 类型错误:无法读取未定义的属性“getProvider”

如果我从 getAuth(..) 调用中删除“firebaseApp”,我会收到此错误:

未创建 Firebase 应用“[DEFAULT”] - 调用 Firebase App.initializeApp() (app/no-app)

然而“console.log(“App Name...”)”行产生:

应用程序名称=[默认]

很明显,一个默认应用程序已经创建了。此外,如果我删除“getAuth ...”调用,数据库调用从下面的实时数据库中提取数据就可以正常工作,这似乎意味着身份验证工作正常,因为我可以从数据库访问数据。

到底他妈发生了什么?

node.js firebase-authentication firebase-admin

4
推荐指数
2
解决办法
9785
查看次数