从Firebase中删除特定用户

hgqdbh6s  于 2023-01-27  发布在  其他
关注(0)|答案(5)|浏览(138)

有没有办法从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()
    • 我的目标是允许登录的管理员用户从系统中删除其他用户。**
zxlwwiss

zxlwwiss1#

使用客户端SDK进行Firebase身份验证时,您只能删除当前已登录的用户帐户。其他任何操作都将带来巨大的安全风险,因为这将允许您的应用的用户删除彼此的帐户。
Admin SDKs for Firebase Authentication专为在可信环境中使用而设计,例如您的开发计算机、您控制的服务器或云函数。由于它们在可信环境中运行,因此可以执行客户端SDK无法执行的某些操作,例如通过了解用户帐户的UID来删除用户帐户。
另见:

  • 从Web应用程序中删除firebase认证用户

另一种常用方法是在Firebase数据库中保留允许列表/阻止列表,并基于此对用户进行授权。请参见如何在Firebase 3.x中禁用注册

oxosxuxt

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中导出以下函数:

export const removeUser = functions.firestore.document("/users/{uid}")
    .onDelete((snapshot, context) => {        
        const serviceAccount = require('path/to/serviceAccountKey.json');
        admin.initializeApp({
            credential: admin.credential.cert(serviceAccount),
            databaseURL: "https://<DATABASE_NAME>>.firebaseio.com"
        });
        return admin.auth().deleteUser(context.params.uid);
    });

1.现在,使用命令firebase deploy --only functions部署云功能
在Firebase Firestore中删除用户时,此代码将运行,并从Firebase Auth中删除该用户。
有关Firebase云函数的详细信息,请参见https://firebase.google.com/docs/functions/get-started

ni65a41a

ni65a41a3#

只需按照执行身份验证的相同方式应用此代码。

var user = firebase.auth().currentUser;

user.delete().then(function() {
  // User deleted.
}).catch(function(error) {
  // An error happened.
});
vdzxcuhz

vdzxcuhz4#

使用Javascript API(不是管理SDK)

就像this answer指出的用户登录一样,必须创建第二个应用程序才能删除登录用户之外的其他用户。
我是这样做的:

async deleteUser (user) {
    // Need to create a second app to delete another user in Firebase auth list than the logged in one.
    // https://stackoverflow.com/a/38013551/2012407
    const secondaryApp = firebase.initializeApp(config, 'Secondary')

    if (!user.email || !user.password) {
      return console.warn('Missing email or password to delete the user.')
    }

    await secondaryApp.auth().signInWithEmailAndPassword(user.email, user.password)
      .then(() => {
        const userInFirebaseAuth = secondaryApp.auth().currentUser
        userInFirebaseAuth.delete() // Delete the user in Firebase auth list (has to be logged in).
        secondaryApp.auth().signOut()
        secondaryApp.delete()

        // Then you can delete the user from the users collection if you have one.
      })
  }
z9gpfhce

z9gpfhce5#

在我看来,你可以删除特定的用户没有Firebase管理SDK。你必须存储用户名,密码的帐户,你想管理。和登录帐户-你声明一个管理员帐户。之后,只需按照步骤:使用firebase auth注销-〉使用firebase auth登录您要删除的帐户-〉使用firebase auth删除该帐户-〉使用firebase auth注销-〉使用该“管理员帐户”再次登录。希望此解决方案可以帮助您在不使用Firebase Admin SDK的情况下删除帐户

相关问题