【问题标题】:How to delete authenticated user from firebase in angular如何以角度从firebase中删除经过身份验证的用户
【发布时间】:2020-09-18 22:29:47
【问题描述】:

当点击一个按钮时,我调用了一个函数,

onDelete(id:string){ this.db.collection('Students').doc(id).delete(); }

这里,id 是我要删除的文档的名称,db 是 AngularFireStore 类型的属性,'Students' 是集合的名称。

文件结构: enter image description here 在上图中,集合名称是Students,其中存在多个文档,因为文档名称必须是唯一的,所以我给该名称指定了一些类型的字符串作为id。在每个文档中,都有电子邮件字段,当我删除同一个文档时,我想从身份验证中删除该电子邮件。

注册用户的代码:

this.afAuth.auth.createUserWithEmailAndPassword(email:string,password:string).then(res=>{})

【问题讨论】:

    标签: javascript angular firebase firebase-authentication


    【解决方案1】:

    如果您想删除 Firebase 身份验证中存在的用户,您有两种可能:

    1/ 使用 JavaScript SDK(因为你的应用是用 Angular 制作的)

    你调用delete()方法,如下:

    const user = firebase.auth().currentUser;
    user.delete()
    .then(() => {
       //....
    })
    .catch(err => {
      if (err.code === "auth/requires-recent-login") {
         //Re-authenticate the user 
      } else {
         //....
      }
    })
    

    但请注意,此方法“要求用户最近登录。如果不满足此要求,请要求用户再次进行身份验证,然后调用firebase.User.reauthenticateWithCredential”。 auth/requires-recent-login 代码的错误是“如果用户的上次登录时间未达到安全阈值,则抛出”。

    因此,只有登录用户才能从前端调用此方法,以删除他/她自己的帐户。

    2/ 使用管理 SDK

    您可以使用 Admin SDK 的 deleteUser() 方法,例如在云函数中。

    在这种情况下,不需要让用户登录,因为这是在后端执行的,因此可以删除任何用户。

    例如,您可以由管理员用户触发Callable Cloud Function

    另一种可能性,是在 Firestore 用户的文档删除时触发 Cloud Function。


    根据您的问题更新进行更新:

    我了解您希望在删除时删除 Auth 服务中的用户记录。为此,您可以写一个Cloud Function,如下所示:

    exports.deleteUser = functions.firestore
        .document('Students/{studentID}')
        .onDelete((snap, context) => {
    
            const deletedValue = snap.data();
            const userEmail = deletedValue.Email;
    
            return admin.auth().getUserByEmail(userEmail)
                .then(userRecord => {
                    const userID = userRecord.uid;
                    return admin.auth().deleteUser(userID)
                })
                .catch(error => {
                    console.log(error.message);
                    return null;
                })
    
        });
    

    【讨论】:

    • 感谢 Renaud 的回答。我的问题是,管理员想从数据库中删除选定的学生,在我的情况下为 firestore,然后通过获取文档名称,可以删除数据,但电子邮件 ID 仍会出现在身份验证中。所以我想通过登录管理员删除选定的身份验证。意味着,管理员想要删除其他经过身份验证的用户。希望你明白我的意思。
    • 是的,我明白你的意思:解决方案是使用第二个选项,即管理员触发调用 Admin SDK 的 deleteUser() 方法的云函数。
    • @ArunMishra 这听起来像是您应该添加到您的问题中的信息(下面有一个edit 链接)。那里完全没有整个 Firestore 角度,这很难提供帮助。
    • 如何删除 Firestore 中的用户文档?用户文档的 id 和结构是什么?请使用编辑链接将此信息添加到您的问题中。
    • 嘿雷诺,我已经编辑了这个问题。希望这次我能清楚地解释我的疑问。
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2021-02-28
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多