有没有办法从firebase获取特定的用户帐户,然后将其删除?
例如:
// I need a means of getting a specific auth user.
var user = firebase.auth().getUser(uid);
// Note the getUser function is not an actual function.
之后,我希望删除该用户及其其他数据:
// This works
user.delete().then(function() {
// User deleted.
var ref = firebase.database().ref(
"users/".concat(user.uid, "/")
);
ref.remove();
});
Firebase文档指出,如果用户当前已登录,则可以删除用户:
firebase.auth().currentUser.delete()
- 我的目标是允许登录的管理员用户从系统中删除其他用户。**
5条答案
按热度按时间zxlwwiss1#
使用客户端SDK进行Firebase身份验证时,您只能删除当前已登录的用户帐户。其他任何操作都将带来巨大的安全风险,因为这将允许您的应用的用户删除彼此的帐户。
Admin SDKs for Firebase Authentication专为在可信环境中使用而设计,例如您的开发计算机、您控制的服务器或云函数。由于它们在可信环境中运行,因此可以执行客户端SDK无法执行的某些操作,例如通过了解用户帐户的UID来删除用户帐户。
另见:
另一种常用方法是在Firebase数据库中保留允许列表/阻止列表,并基于此对用户进行授权。请参见如何在Firebase 3.x中禁用注册
oxosxuxt2#
我知道这是一个老问题,但我找到了另一个解决方案。你肯定不想在你的应用程序本身使用firebase-admin,我认为这是由Ali Haider建议的,因为它需要一个私钥,你不想在你的代码中部署这个私钥。
不过,您可以在Firebase中创建一个Cloud函数,在删除Firestore或Realtime数据库中的用户时触发,并让该Cloud函数使用firebase-admin删除用户。在我的例子中,我在Firestore中有一个用户集合,具有与Firebase Auth创建的用户ID相同的用户ID,其中我保存了额外的用户数据,如名称和角色等。
如果你像我一样使用Firestore,你可以做以下事情;如果你使用实时数据库,只要在文档中查找如何使用触发器。
1.确保您的Firebase项目已经初始化了云函数。在您的项目目录中应该有一个名为"functions"的文件夹。如果没有:使用以下命令初始化项目的云函数:
firebase init functions
.1.在以下页面的Firebase控制台中获取服务帐户的私钥:设置〉服务帐户。
1.将包含私钥的json文件放在index.ts文件旁边的
functions\src
文件夹中。1.在index. ts中导出以下函数:
1.现在,使用命令
firebase deploy --only functions
部署云功能在Firebase Firestore中删除用户时,此代码将运行,并从Firebase Auth中删除该用户。
有关Firebase云函数的详细信息,请参见https://firebase.google.com/docs/functions/get-started
ni65a41a3#
只需按照执行身份验证的相同方式应用此代码。
vdzxcuhz4#
使用Javascript API(不是管理SDK)
就像this answer指出的用户登录一样,必须创建第二个应用程序才能删除登录用户之外的其他用户。
我是这样做的:
z9gpfhce5#
在我看来,你可以删除特定的用户没有Firebase管理SDK。你必须存储用户名,密码的帐户,你想管理。和登录帐户-你声明一个管理员帐户。之后,只需按照步骤:使用firebase auth注销-〉使用firebase auth登录您要删除的帐户-〉使用firebase auth删除该帐户-〉使用firebase auth注销-〉使用该“管理员帐户”再次登录。希望此解决方案可以帮助您在不使用Firebase Admin SDK的情况下删除帐户