我想在我的 Angular 7 项目中添加使用 firebase 进行用户身份验证的管理用户的功能。
我的应用程序在我的项目中成功使用 firebase 进行用户身份验证。
现在我想为我的程序的管理员用户提供列出用户、更新用户、添加用户、控制用户角色等的能力。我不希望我的用户需要访问 firebase 管理控制台。
我的第一个测试只是使用 admin.auth().listUsers 函数列出 firebase 用户。有很好的文档介绍如何使用 Node.js 执行此操作,但没有关于 Angular 的下一步。
我的问题是需要定义变量“admin”。
当我使用node.js代码时:
var admin = require('firebase-admin');
我收到一大堆错误,例如:
./node_modules/google-gax/build/src/operationsClient.js 中的错误未找到模块:错误:无法解析“/Users/Stan/Sites/google/dallas/node_modules/google-gax”中的“./operations_client_config” /build/src' ./node_modules/google-auth-library/build/src/auth/googleauth.js 中的错误:找不到模块:错误:无法解析“/Users/Stan/Sites/google/”中的“child_process” dallas/node_modules/google-auth-library/build/src/auth' ./node_modules/google-gax/node_modules/google-auth-library/build/src/auth/googleauth.js 中的错误:找不到模块:错误:可以无法解析“/Users/Stan/Sites/google/dallas/node_modules/google-gax/node_modules/google-auth-library/build/src/auth”中的“child_process”
当我不输入上面的要求行时,唯一的问题是“admin”未定义。
我认为我错过了一些小设置问题,但非常感谢在此之后的任何帮助。
我正在尝试仅使用环境变量(无法访问文件系统)来初始化 Firebase Admin SDK 。
我有该service-account-file.json文件,并且可以通过以下方式使其在本地工作:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-file.json"
...
myfile.go:
app, err := firebase.NewApp(context.Background(), nil)
Run Code Online (Sandbox Code Playgroud)
但是,我想将 的内容service-account-file.json放入环境变量中,并使用其值初始化 firebase Admin SDK。
有一个未解决的问题声称您可以通过CredentialsFromJSON来完成此操作,但我不太明白。
有人有这个工作吗?如果可以,您能举个例子吗?
我正在查看以下文档以使用 Node.js Firebase 管理 SDK 创建用户:https ://firebase.google.com/docs/auth/admin/manage-users#create_a_user
但是,我想创建一个无密码(电子邮件链接)登录的用户,而不是密码。这可能吗?
如果我不为用户指定密码,会发生什么情况?
我的网络应用程序当前使用无密码登录,因此可以正常工作。
我在 javascript 服务器后端代码上使用 firebase admin 和 firebase 函数,我似乎无法弄清楚函数和管理数据库引用之间有什么区别。我可以像这样使用它们:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
admin.database.ref('reference');
functions.database.ref('reference');
Run Code Online (Sandbox Code Playgroud) javascript firebase firebase-realtime-database google-cloud-functions firebase-admin
我从去年秋天开始就是 flutter-fire 用户
注意:服务器客户端库绕过所有 Cloud Firestore 安全规则,而是通过 Google 应用程序默认凭据进行身份验证。如果您使用服务器客户端库或 REST 或 RPC API,请确保为 Cloud Firestore 设置身份和访问管理 (IAM)。
上面的评论来自firebase 团队的链接。听起来评论中的“服务器客户端库”或 api 意味着来自我的移动应用程序外部的请求,并且它们会绕过云 Firestore 安全规则。但是,当我在未经许可的情况下尝试使用 Postman 与我的应用程序中的请求进行相同的获取请求时,Postman 控制台中的响应很好,这意味着出现了权限被拒绝错误。
那么,我的问题来了。我希望知道哪些类型的请求到底相当于官方参考文献中提到的这些绕过所有安全规则的“服务器客户端库”或“REST 或 RPC API”。Postman 正是“REST”,在这种情况下,firebase 完美地按照我想要的方式工作(产生了权限拒绝)。因此,Firebase 团队必须要注意一些特定的类型。
我知道 firebase-admin sdk 是可能的服务器端库之一,但是当我们尝试访问 firebase admin sdk 时,应该需要完全相同的权限或身份验证程序,它可以控制高于安全规则的 firebase 数据,就像 firebase 团队评论的那样。因此,问题的重点是攻击者可能在没有适当安全程序的情况下恶意操纵我们的火力点的解决方案。
希望一些 Firebase 专家能够以丰富的知识和经验为这个问题给出很酷的答案!先感谢您 [:
firebase firebase-security flutter firebase-admin google-cloud-firestore
我使用谷歌云端点(版本1,使用android studio)为我的Android应用程序构建了一个移动后端.我希望通过电子邮件/密码验证我的用户,因此我使用Firebase身份验证来执行此操作.Firebase身份验证sdk允许我在客户端(在android中)获取每个用户的令牌,而firebase管理员sdk允许我检查后端令牌的有效性.我了解在云端点我可以提供自己的自定义身份验证器(请参阅:Google Cloud端点和用户身份验证),我计划在我的自定义身份验证器中调用firebase admin sdk来验证用户的呈现令牌.
我的问题是,因为我使用谷歌云端点来构建我的后端,我不知道在我可以验证任何令牌之前,在哪里插入代码来执行firebase管理对象的初始化.在常规应用程序引擎环境中,您将在HTTPServlet的init()方法中执行此初始化(请参阅https://github.com/GoogleCloudPlatform/firebase-appengine-backend/blob/master/src/main/java/com /google/cloud/solutions/flexenv/backend/MessageProcessorServlet.java),但云端点通过自动提供"SystemServiceServlet"作为HTTPServlet来隐藏此信息.我已经尝试了继承SystemServiceServlet并重写init()方法,但是然后将端点部署到app引擎失败了,因为显然,创建android客户端库要求必须使用SystemServiceServlet(并且必须将其命名为"SystemServiceServlet") ").
我可以在云端点提供的每个api方法中初始化firebase管理应用程序(例如,在我的api的insert方法中),但这看起来效率极低.如何在使用谷歌云端点构建的后端中使用Firebase管理员sdk?
非常感谢你花时间陪伴
google-app-engine android google-cloud-endpoints firebase-authentication firebase-admin
我想知道我由 Firebase Admin SDK .createCustomToken(uid) 创建的令牌是否应该存储在某处。
考虑以下情况:
客户端:新用户A注册
服务器:token = fbSDK.createCustomToken(uid)
客户端:使用此令牌通过 Firebase 进行身份验证
稍后用户A注销并重新登录
我应该查找该用户保存的令牌吗?
或者我应该再次使用 fbSDK.createCustomToken(uid) 并且此令牌将与之前的令牌相同或至少附加到之前创建的 firebase 用户 A?
提前致谢。
我有一个自动化测试,可以在本地运行云函数,以管理员身份登录,并将数据写入 Firestore。之前在非管理员权限下效果很好,现在我们正在将云功能升级为具有管理员权限。我可以在本地很好地运行测试,并且可以在本地提供该功能并使用 Postman 执行它,并且它工作得很好。
然而,当在我们的构建服务器(Travis CI - 付费)上运行时,该函数会抛出错误:14 UNAVAILABLE: Getting metadata from plugin failed with error: Could not refresh access token。
这是登录的第一个测试,因此意外地已经拥有正在刷新的访问令牌。
在本地,我已使用 登录到 firebase firebase login。我已经使用firebase login:ci和为 Travis 导出了登录令牌travis encrypt。
对于为什么我们在 Travis 上而不是在本地看到此错误有什么想法吗?
这是堆栈跟踪:
14 UNAVAILABLE: Getting metadata from plugin failed with error: Could not refresh access token.
at Object.<anonymous>.exports.createStatusError (node_modules/google-gax/node_modules/grpc/src/common.js:87:15)
at Object.onReceiveStatus (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:1188:28)
at InterceptingListener.Object.<anonymous>.InterceptingListener._callNext (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:564:42)
at InterceptingListener.Object.<anonymous>.InterceptingListener.onReceiveStatus (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:614:8)
at callback (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:841:24)
我正在初始化 Firebase:
const admin = require('firebase-admin');
admin.initializeApp({
'credential': admin.credential.applicationDefault(), …Run Code Online (Sandbox Code Playgroud) I get the above error when I try and send messages to devices:
let functions = require("firebase-functions");
const admin = require("firebase-admin");
var serviceAccount = require("./configs.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://pushmessage-bd1eb.firebaseio.com"
});
const db = admin.firestore();
exports.getUsers = functions.https.onRequest(async (req, res) => {
db.collection("users")
.get()
.then(snapshot => {
const messaging = admin.messaging();
let registrationTokens = [];
snapshot.forEach(doc => {
let id = doc.id;
registrationTokens.push(id);
});
console.log(registrationTokens);
// process the tokens
const message = {
data: { title: "Testing", body: "Test" }, …Run Code Online (Sandbox Code Playgroud) 在 Firebase Admin SDK 文档的不同页面(例如此页面)中,建议:
如果您的代码部署在由 Google 管理的环境中,则 Admin SDK 可以尝试自动发现...为您的应用程序配置的服务帐户...要使用这些签名方法,请使用 Google 应用程序默认凭据初始化 SDK并且不指定服务帐户 ID 字符串:
admin.initializeApp();
当我这样做时,我收到以下错误消息:
[错误:您的 API 密钥无效,请检查您是否已正确复制。] code: 'auth/invalid-api-key', message: '您的 API 密钥无效,请检查您是否已正确复制。'
请注意,当我在项目中手动下载并导入凭据和服务帐户 JSON 文件时,我没有收到此错误消息。
重现错误的详细信息:1-我正在使用 Firebase CLI 将其部署在 Cloud Functions 上。所以,基本上,我使用firebase deploy.
2-这是我的 Node.js 应用程序中的最少代码:
const admin = require("firebase-admin");
const config = require("./firebase-config");
admin.initializeApp();
const firebase = require("firebase");
firebase.initializeApp(config);
const functions = require("firebase-functions");
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.json());
const cors = require("cors"); …Run Code Online (Sandbox Code Playgroud) api-key firebase google-cloud-platform google-cloud-functions firebase-admin
当分配自定义声明时,客户端中的用户必须注销并登录,然后声明才会显示在他们的帐户上。我今天花了一整天的时间试图找出为什么我的声明没有生效,结果用户必须重新登录才能让声明无缘无故地显示 LOL rip 我一天中的 5 个小时。我可以添加什么内容来刷新用户信息而无需重新登录吗?
我正在尝试运行此代码来实现 Firestore 备份。
但这是我第一次将其部署到 Next.js 项目中。
我会在我的/api/backup终点上击中它。
const backupHandler: NextApiHandler = async (req,res) => {
try {
const admin = initializeFirebaseAdmin();
const PROJECT_ID = getProjectId();
const client = new admin.firestore.v1.FirestoreAdminClient();
const DB_NAME = client.databasePath(PROJECT_ID, '(default)');
const TODAY = getToday(); // YYYY-MM-DD
const hashId = generateId().slice(0,5);
const BUCKET = `gs://${PROJECT_ID}.appspot.com`;
const FOLDER = `firestore-backup/${TODAY}-${hashId}`;
const FULL_PATH = `${BUCKET}/${FOLDER}`;
await client.exportDocuments({
name: DB_NAME,
outputUriPrefix: FULL_PATH,
collectionIds: [] // CAN LIST SPECIFIC COLLECTIONS
});
console.log(`Backup successfully exported`);
return res.status(200).send("Ok");
}
catch(err) …Run Code Online (Sandbox Code Playgroud) node.js firebase firebase-admin next.js google-cloud-firestore