更新或删除时,Cloud Function会收到firebase权限被拒绝错误.
使用文件中的凭据初始化服务帐户,以便使用auth.createCustomToken当前不可用于默认帐户的凭据
admin = require('firebase-admin');
functions = require('firebase-functions');
credential = admin.credential.cert(require('./credentials.json'));
admin.initializeApp({credential: credential, databaseURL: functions.config().firebase.databaseURL});
Run Code Online (Sandbox Code Playgroud)
阻止更新的安全规则:
"downloads": {
"$key": {
".write": "data.val() == null"
}
}
Run Code Online (Sandbox Code Playgroud)
与所述用户将数据插入push到/downloads然后云功能试图更新并随后除去.即使管理员帐户据称绕过所有安全规则(包括验证),这两个操作都会失败.
FIREBASE WARNING: update at /downloads/-Kexz33ljYjKblF_ZgUo failed: permission_denied
FIREBASE WARNING: set at /downloads/-Kexz33ljYjKblF_ZgUo failed: permission_denied
Run Code Online (Sandbox Code Playgroud)
如果我将规则更改为此,则第一个错误(更新)消失:
"downloads": {
"$key": {
".write": "newData.child('uid').val() == auth.uid"
}
}
Run Code Online (Sandbox Code Playgroud)
解决方法是重新定义event.data.ref为
ref = admin.database().ref(event.data.ref.path.toString())
Run Code Online (Sandbox Code Playgroud) javascript firebase firebase-security google-cloud-functions firebase-admin
我正在使用Firebase管理SDK从我的节点服务器发送推送通知.但是在iOS上我只想在应用程序处于后台/终止时显示通知,而不是在前台时显示.目前它将始终显示通知.
这是我的有效载荷:
const payload = {
data: {
data: 'data',
more: 'moreData',
},
notification: {
title: 'Incoming Call',
body: 'Someone is calling you',
text: 'This is some text',
sound: 'default',
click_action: 'com.example.INCOMING_CALL',
}
};
const options = {
priority: 'high',
time_to_live: 30,
collapse_key: 'Video Call',
content_available: true,
};
admin.messaging().sendToDevice(tokensList, payload, options);
Run Code Online (Sandbox Code Playgroud)
它是我的有效载荷的东西还是我必须在AppDelegate.swift中做的事情?
是否可以在ref中使用通配符时在管理SDK中监听child_added?在云函数中,我可以使用"{random}"但这在Node.js中不起作用.例:
var refHighscore = db.ref("highscores/classic/alltime/{score}")
Run Code Online (Sandbox Code Playgroud) 我需要通过Firebase函数访问firebase admin 。我有一个通过HTTP触发器调用的函数,它将创建自定义身份验证令牌。
在Firebase管理文档中,他们说您需要引用JSON包含所有键(serviceAccount)的文件
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<databaseName>.firebaseio.com"
})
Run Code Online (Sandbox Code Playgroud)
由于我已经在自己的Firebase函数中,因此我需要上传这些密钥,还是可以任何其他方式访问它?
将我所有的管理密钥上传到Firebase存储只是为了铸造新令牌,这感觉非常不必要。
我只是想从我的新firebase-admin SDK的Java代码中解决弃用说明,该代码是在版本5.3.1中编写的,但是在将版本升级到5.5.0之后,出现了弃用说明,这是我的示例码:
使用FirebaseAuth(上deprecatation: Task,addOnSuccessListener和addOnFailureListener):
private CompletableFuture<FirebaseToken> getDecryptedTokenCompletableFuture(String firebaseTokenString) {
CompletableFuture<FirebaseToken> tokenFuture = new CompletableFuture<>();
Task<FirebaseToken> tokenTask = FirebaseAuth.getInstance(firebaseApp).verifyIdToken(firebaseTokenString);
tokenTask.addOnSuccessListener(tokenFuture::complete);
tokenTask.addOnFailureListener(exception -> tokenFuture.completeExceptionally(new AuthorizationException("Failed to verify token", exception)));
return tokenFuture;
}
Run Code Online (Sandbox Code Playgroud)
而对于FirebaseDatabase(上deprecatation: ,Task,,addOnSuccessListener 和):addOnFailureListenerupdateChildrenremoveValue
public static <T> CompletableFuture<T> toCompletableFuture(Task<T> task) {
CompletableFuture<T> future = new CompletableFuture<>();
task.addOnCompleteListener(result -> {
future.complete(result.getResult());
}).addOnFailureListener(future::completeExceptionally);
return future;
}
/**
* @param updatedParams if null it will removed child
* @param …Run Code Online (Sandbox Code Playgroud) 为了设置自定义声明,有人使用:
admin.auth().setCustomUserClaims(uid,{claim:value});
Run Code Online (Sandbox Code Playgroud)
确实存在
admin.auth().updateUser(uid,{claim:value});
Run Code Online (Sandbox Code Playgroud)
...但是我不清楚两者之间有何不同,而且似乎都没有人真正删除以前应用的自定义声明。
我对Node和Firebase都是新手,但似乎无法在线找到此错误。
当我尝试通过Firebase Admin加载Firebase数据库时,出现以下错误:
TypeError:rtdb.initStandalone不是函数DatabaseService ../ node_modules / firebase-admin / lib / database / database.js.DatabaseService.getDatabase node_modules / firebase-admin / lib / database / database.js:62
var db = this.INTERNAL.databases[dbUrl];
if (typeof db === 'undefined') {
var rtdb = require('@firebase/database');
db = rtdb.initStandalone(this.appInternal, dbUrl).instance;
this.INTERNAL.databases[dbUrl] = db;
}
return db;
Run Code Online (Sandbox Code Playgroud)
节点模块版本:Firebase-Admin@5.8.0 @ firebase / app @ 0.1.1 @ firebase / database @ 0.1.3
node.js firebase reactjs firebase-realtime-database firebase-admin
我想知道为什么Timestamp对象无法按预期工作?
它可以在测试环境中工作(我使用Mocha),但是在部署后会引发错误。
索引
import { Timestamp, QuerySnapshot } from "@google-cloud/firestore";
....
async someFunction() {
let col = firestore.collection("mycollection");
let now = Timestamp.now();
let twentyMinsAgo = Timestamp.fromMillis(now.toMillis() - (1200 * 1000));
return col
.where('LastEdited', '>=', twentyMinsAgo) //This throws error
.get()
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
Argument "value" is not a valid QueryValue.
Detected an object of type "Timestamp" that doesn't match the expected instance.
Please ensure that the Firestore types you are using are from the same NPM package.
at Validator.(anonymous function).err [as isQueryValue] …Run Code Online (Sandbox Code Playgroud) firebase google-cloud-functions firebase-admin google-cloud-firestore
我正在创建一个应该可以管理用户访问权限的应用程序。管理员应具有创建,删除和编辑用户帐户的权限。
我正在使用Firebase创建用户帐户。
现在,每个用户都可以创建,编辑和删除他们的帐户,但是问题是管理员应该这样做,而不仅仅是用户。
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/services.dart';
import 'package:google_sign_in/google_sign_in.dart';
class UserLoader {
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSIgnIn = new GoogleSignIn();
static final UserLoader _singleton = new UserLoader._internal();
FirebaseUser user;
factory UserLoader() {
return _singleton;
}
UserLoader._internal();
Future<FirebaseUser> signInWithEmailAndPassword(email, password) async {
if (user != null) return user;
_signInAnonymously().then((value) {
if (value != null) {
user = value;
}
}).catchError((e) {
return null;
});
if (user == null) {
FirebaseUser user = await _auth.signInWithEmailAndPassword(
email: email, …Run Code Online (Sandbox Code Playgroud) 我们正在开始开发Web应用程序,并正在考虑使用Firebase身份验证来处理我们的注册流程。但是,我们不确定ID令牌验证的工作方式。似乎可以用Firebase领域之外的令牌来验证用户。我们正在考虑在Google Kubernetes Engine上安装Node.js应用程序-据我所知,它不与Firebase身份验证集成。
Firebase提供了有关如何使用Firebase Admin SDK验证ID令牌的以下示例:
// idToken comes from the client app (shown above)
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
// ...
}).catch(function(error) {
// Handle error
});
Run Code Online (Sandbox Code Playgroud)
我的问题是Firebase是否必须调用其服务器才能验证每个用户请求上的ID令牌(这会增加延迟),或者它是否长时间缓存了验证令牌所需的加密密钥–我就是这么认为的。
firebase ×10
firebase-admin ×10
node.js ×3
flutter ×1
ios ×1
java ×1
java-8 ×1
javascript ×1
reactjs ×1
swift ×1