从Firebase

时间:2016-08-06 04:01:12

标签: javascript firebase firebase-authentication

有没有办法从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 Documentation表示如果用户当前已登录,则可以将其删除:

firebase.auth().currentUser.delete()

我的目标是允许登录管理员用户从系统中删除其他用户。

6 个答案:

答案 0 :(得分:6)

我知道这是一个老问题,但是我找到了另一个解决方案。 正如我认为是Ali Haider所建议的那样,您绝对不希望在应用程序本身中使用firebase-admin,因为它需要一个私钥,并且您不想将其与代码一起部署。

但是,您可以在Firebase中创建一个Cloud Function,该功能在删除Firestore或Realtime数据库中的用户时触发,并允许该Cloud Function使用firebase-admin删除用户。 就我而言,我的Firestore中有一个用户集合,其用户名与Firebase Auth创建的用户名相同,在其中我保存了额外的用户数据,例如名称和角色等。

如果您以我的身份使用Firestore,则可以执行以下操作。如果您使用的是实时数据库,只需在文档中查找如何使用触发器即可。

  1. 确保您的Firebase项目已初始化云功能。您的项目目录中应该有一个名为“功能”的文件夹。如果没有,请使用以下命令为您的项目初始化Cloud Functions:firebase init functions

  2. 在Firebase控制台的以下页面上为您的服务帐户获取私钥:“设置”>“服务帐户”。

  3. 将包含私钥的json文件放在index.ts文件旁边的functions\src文件夹中。

  4. 在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
  2. 部署您的Cloud Function。

在Firebase Firestore中删除用户时,此代码将运行,并且还将用户从Firebase身份验证中删除。

有关Firebase云功能的详细信息,请参阅https://firebase.google.com/docs/functions/get-started

答案 1 :(得分:5)

更新:现在有Firebase Admin SDK以管理权限和allows you to delete users运行。

当前删除用户的唯一方法是首先以该用户身份登录。目前没有API可以在没有该用户首次登录的情况下删除用户。

我们知道许多应用都需要此功能,并正在努力添加它。但是像往常一样,我们没有关于什么时候可用的时间表。

与此同时,一种常见的方法是将白名单/黑名单保留在Firebase数据库中,并根据该列表进行授权。见How to disable Signup in Firebase 3.x

答案 2 :(得分:1)

只需以与完成身份验证相同的方式应用此代码。

var user = firebase.auth().currentUser;

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

答案 3 :(得分:0)

使用 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.
      })
  }

答案 4 :(得分:-1)

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

答案 5 :(得分:-2)

npm i-保存firebase-admin

从“ firebase-admin”以管理员身份导入*