我正在尝试下载一些已上传到 Google Cloud Storage(也称为存储桶)的图像。我无法在我的任何const storage或上使用 .ref() 方法const bucket,因为它们是管理 SDK 的一部分。admin.storage 只有方法 .bucket() ( https://firebase.google.com/docs/reference/admin/node/admin.storage.Storage )。
我能够访问存储桶。\nbucket.getFiles() 有效,结果是一个包含大量元数据(如文件名、存储桶所有者等)的文件对象数组。如何从云存储中获取图像并将其插入到 html 对象中?
\n\nvar 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
我有这样的云函数代码代码:
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
较大:假 较低:假
那么如何正确地与时间戳进行比较?
自 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
假设我们想要向两个注册令牌(仅限 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) 我创建了一个云函数,它会在 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
我尝试使用以下功能(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
我正在尝试使用单独的服务帐户(即不是默认服务帐户)在 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 凭据。应用程序必须使用有效的凭证实例进行初始化。
任何提示表示赞赏。
有没有一种方法可以创建自定义索赔而无需通过云功能?
我真的只需要为几个帐户设置它,我目前的计划是 Spark。我现在还不能升级。但我需要测试此功能以实现基于角色的身份验证。
谢谢,请尽可能详细,因为我是 firebase cli 的新手。
firebase firebase-authentication google-cloud-functions firebase-admin
我有以下尝试捕获
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
但我不知道可以从哪里导入它。
我尝试检查错误是否是 Error 的一个实例,其中显示
Property 'code' does not exist on type 'Error'.
Run Code Online (Sandbox Code Playgroud)
node.js firebase typescript google-cloud-functions firebase-admin
我在节点服务器上运行以下代码。
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 ...”调用,数据库调用从下面的实时数据库中提取数据就可以正常工作,这似乎意味着身份验证工作正常,因为我可以从数据库访问数据。
到底他妈发生了什么?
firebase-admin ×10
firebase ×7
javascript ×3
node.js ×3
java ×1
python ×1
reactjs ×1
typescript ×1