标签: firebase-admin

在Google App Engine上运行时,Firebase函数被调用了两次

我正在Google App Engine灵活环境中运行firebase。我在一个节点上设置了一个添加子项的侦听器,每次添加一个子项时,它将被调用两次。仅当我在Google App Engine上运行此代码时,才会发生这种情况。如果我在本地运行,它将按预期运行。这是代码

// [START app]
'use strict';

var express = require('express');
var bodyParser = require('body-parser');
var request = require('request');
var firebase = require('firebase-admin');

var app = express();

firebase.initializeApp({
    credential: firebase.credential.applicationDefault(),
    databaseURL: "https://myurl.firebaseio.com/"
});

var db = firebase.database();
var globalNotifications = db.ref("/globalNotifications");

var API_KEY = "myKey"; // Your Firebase Cloud Server API key
var now = new Date();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

globalNotifications.orderByChild('processed').equalTo(0).on("child_added", function(snapshot) {

    var key = snapshot.key;
    var incomingNotification = snapshot.val();
    var userID = incomingNotification.userID; …
Run Code Online (Sandbox Code Playgroud)

google-app-engine node.js firebase-admin

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

无法从 java admin sdk 向 firebase 实时数据库添加数据

我正在尝试从一个简单的 Java 程序将数据添加到 firebase 实时数据库 它按照https://firebase.google.com/docs/database/admin/save-data 中的描述正确执行

但我没有看到 firebase 控制台的数据 - 它实际上没有被添加到数据库中

代码

public static void main(String[] args) {

    FileInputStream serviceAccount;
    try {
        serviceAccount = new FileInputStream("E:\\development\\firebase\\key\\svbhayani_realtimedb-98654-firebase-adminsdk-n75sy-49f62c9338.json");
        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                .setDatabaseUrl("https://realtimedb-98654.firebaseio.com")
                .build();

        FirebaseApp.initializeApp(options);

        final FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("sameer");

        DatabaseReference usersRef = ref.child("users");

        Map<String, String> users = new HashMap<>();
        users.put("HaiderAli", "HaiderAli");
        users.put("sameer", "HaiderAli");

        usersRef.setValueAsync(users);

        System.out.println("Done");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以解释 - bcoz 没有任何错误,我从 …

java firebase firebase-realtime-database firebase-admin

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

从服务器登录用户的Firebase Admin SDK

我一直在Node JS代码中使用Firebase Admin SDK从服务器端对用户进行身份验证。

Admin SDK提供了一种admin.auth().createUser()创建新用户的方法。

admin.auth().createUser({
        email,
        password,
        displayName: name
    })
    .then(function(user) {
        console.log("Successfully created new user:", user.uid)
        return res.send(user)
    })
    .catch(function(err) {
        console.log("Error creating new user:", err)
        return res.send(err)
    })
Run Code Online (Sandbox Code Playgroud)

但是现在如何像auth.signInWithEmailAndPassword(email, pass)Firebase Client SDK中的方法那样使用户登录。

firebase admin SDK上有一种方法可以通过Email获取用户信息admin.auth().getUserByEmail(email)。此方法返回所有用户信息,包括密码,但该密码被散列。因此,现在有任何变通办法可以从Server获得适当的身份验证用户。

node.js firebase firebase-authentication firebase-admin

1
推荐指数
2
解决办法
1814
查看次数

Python firebase 数据库浅层获取数据

众所周知,Firebase 实时数据库是一棵巨大的 JSON 树

由于 Firebase 实时数据库允许嵌套深度高达 32 级的数据,您可能会认为这应该是默认结构。但是,当您在数据库中的某个位置获取数据时,您还会检索其所有子节点。

现在我需要进入的数据库具有以下结构:

root
|
|- category 1
|  |
|  |
|  |-sub category 1
|  |  |
|  |  |- record 1
|  |  |  |- (...)
|  |  |
|  |  |- record 2
|  |  |   |- (...)
|  |  |
|  |  |- (...) record n
|  |
|  |
|  |- (...) sub category n
|
| - (...) category n
Run Code Online (Sandbox Code Playgroud)

每个类别有数千个子类别,每个子类别有数千条记录。

有什么方法可以使用 python 和官方 …

python firebase firebase-realtime-database firebase-admin

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

无法使用 python 3.72 连接 firebase

如果有人知道如何将 python 3.7 版本与 firebase 连接。我正在使用以下代码,

from firebase import firebase
firebase = firebase.FirebaseApplication('https://your_storage.firebaseio.com', None)
result = firebase.get('/users', None)
print (result)
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误 ImportError: cannot import name 'firebase' from 'firebase'

python firebase firebase-realtime-database firebase-admin

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

如何从FCM令牌获取Firebase用户ID?(在服务器上的管理代码中)

我登录的Android客户端在我的服务器上注册其令牌。问题是我不确定特定客户端发送的令牌是否真正属于该客户端用户ID。错误的客户端可能会注册其他用户的有效令牌。

给定FCM令牌和用户ID,服务器上的管理员代码如何验证该令牌确实属于(经过身份验证的)用户ID?

android firebase firebase-authentication firebase-cloud-messaging firebase-admin

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

Firebase 管理数据库始终返回 null 作为快照值

根据这一指示,我总是得到nullsnapshot.val();。这是为什么?

node sdk用于访问usersfirebase 数据库上的集合。我确定该集合确实存在:

用户集合

请求用户:

import { NextFunction, Request, Response } from 'express';

import * as admin from 'firebase-admin';

export const getUsers = (request: Request, response: Response, next: NextFunction) => {

admin.database.enableLogging(true);
const db = admin.database();
const ref = db.ref("users");

ref.once("value", function (snapshot) {
    const users = snapshot.val();
    console.log('users', users); // always null
    response.json({
      success: true,
      result: users
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

设置admin

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: config.databaseURL
}); …
Run Code Online (Sandbox Code Playgroud)

node.js firebase-admin

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

日期(时间戳)超过 24 小时的 Firestore 查询

我的文档中有一个字段存储为时间戳,如下所示

  "created_at": admin.firestore.FieldValue.serverTimestamp(),
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用 Cloud Functions 中的 admin lib 查找所有文档,这些文档具有该字段超过 24 小时的历史

const tsToMillis = admin.firestore.Timestamp.now().toMillis();
const results = await files.where("created_at", ">", tsToMillis - (24 * 60 * 60 * 1000)).get();
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上面的方法,但是我不确定如何获取值来比较它,或者有没有办法直接使用 FS 中的时间戳来执行此操作而不进行转换?

javascript firebase-admin google-cloud-firestore

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

在 Cloud Run Container 中使用 Firebase Admin Auth

我在运行 graphql 的 Cloud Run 服务器中使用 Firebase 管理员身份验证作为身份验证和授权机制(客户端发送令牌,服务器将验证和检查自定义声明中包含的用户角色)。admin auth 模块在尝试调用 verifyIdToken 时会抛出错误。不过,从云函数调用管理员身份验证方法可以完美地工作。

FirebaseAuthError:必须使用证书凭据初始化应用程序或将您的 Firebase 项目 ID 设置为 GOOGLE_CLOUD_PROJECT 环境变量以调用 verifyIdToken()。

我曾尝试使用应用引擎服务帐户(与云功能使用的服务帐户相同)并使用 firebase 管理员角色创建新的服务帐户作为我的云运行服务帐户,但无济于事。我可以通过在我的 Dockerfile 中提供凭证文件(从 firebase 控制台生成)并设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 来使其运行,但我想将它用作最后的手段,除了它非常难看。

下面是我的 Apollo 服务器的上下文函数

import { Context, ContextFunction } from 'apollo-server-core';
import { ExpressContext } from 'apollo-server-express/dist/ApolloServer';

import { firebase } from '../config';
import { batchLoaders } from './batchLoaders';

export const context: ContextFunction<ExpressContext, Context> = async ({
  req
}) => {
  const token = req.headers.authorization || '';
  const defaultContext = { batchLoaders …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-authentication firebase-admin google-cloud-run

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

Firebase:如何从服务器上的用户名和密码生成访问令牌?

我有一个 Firebase 应用程序,我正在集成 Zapier。他们要求用户通过他们的表单对我的应用程序进行身份验证。

它的工作方式是 Zapier 将向用户请求电子邮件和密码,并将其发送到我的端点以获取访问令牌并将其用于任何进一步的请求。

我不太清楚如何从服务器(节点 js)上的用户名和密码生成访问令牌,因为所有身份验证方法都存在于客户端 SDK 中。

到目前为止,我希望使用提供的电子邮件/密码对用户进行身份验证,从他们生成自定义令牌uid并将其发送回 Zapier。但我不能这样做,因为signInWithEmailAndPassword服务器 SDK 中没有或类似的方法。

我知道我可以通过电子邮件获取用户,但是我如何检查密码,因为相应的方法再次仅在客户端 SDK 中可用?

到目前为止,我有以下代码:

const rp = require('request-promise');

app.post('/api/integrations/zapier/auth', (req, res) => {
        let data = req.body
        admin.auth().signInWithEmailAndPassword(data.email, data.password) // <- this method doesn't exist in the server sdk
            .then(response => admin.auth().createCustomToken(response.user.id))
            .then(customToken => rp({
                url: `https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=${config.apiKey}`,
                method: 'POST',
                body: {
                    token: customToken,
                    returnSecureToken: true
                },
                json: true,
            }))
            .then(idToken => {
                res.send({
                    accessToken: idToken,
                    filed: data.email
                });
            }).catch(error => res.status(500).send(error)); …
Run Code Online (Sandbox Code Playgroud)

javascript firebase firebase-authentication firebase-admin

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