【问题标题】:How to check if current password is valid in firease admin sdk?如何检查当前密码在firebase admin sdk中是否有效?
【发布时间】:2018-06-16 21:58:28
【问题描述】:

我有一个基于 Firebase 的应用。要求是通过输入currentPasswordnewPassword更新帐户密码

在服务器上(firebase 云功能 + admin sdk)我需要检查提供的currentPassword 是否有效。

第一次创建帐户时,firebase 会自动加密密码,并且只返回哈希值。

问题是 - 这种加密是在幕后自动完成的

由于无法访问加密方法,我无法获得currentPassword 的哈希值,以便将其与存储的真实密码哈希值进行比较。查看这两个哈希值是否匹配。

那么我如何检查currentPassword 是否有效?如何访问 firebase-auth 用于加密的相同方法?

到目前为止,我找不到任何相关内容。我在这里使用错误的方法吗?为什么这么难找?

【问题讨论】:

    标签: firebase firebase-authentication firebase-admin


    【解决方案1】:

    我不太确定您是否可以使用云功能验证密码,关键是要确保黑客即使以某种方式入侵服务器也无法恢复用户的密码,如果您可以恢复通过知道哈希和盐来获得密码,为什么他们不会成为黑客?但是,您可以在您的应用中执行此操作:

    firebase.auth().currentUser.reauthenticateWithCredential(firebase.auth.EmailAuthProvider.credential(firebase.auth().currentUser.email, oldPassword);
    

    另外,为了给想要更改密码的用户提供一种替代方式,只需向他们发送重置密码电子邮件,这样就非常安全,他们不必输入旧密码:

    firebase.auth().sendPasswordResetEmail(firebase.auth().currentUser.email)
    

    【讨论】:

      【解决方案2】:

      passwordHashpasswordSalt 仅在您通过调用listUsers() 检索用户信息时可用。因此,仅当您将用户数据从 Firebase Auth 迁移到不同的用户管理系统时,它们才有用。

      【讨论】:

        【解决方案3】:

        对于这个用例,我需要实现 2 种不同的方法。

        案例 1:agent 更改自己的密码时。 我使用@K.Wu 提供的浏览器代码 - firebase 会自动向用户发送密码重置电子邮件。

        firebase.auth().sendPasswordResetEmail(firebase.auth().currentUser.email)

        案例2:当高权限用户:admin / manager更改agent密码

        我使用服务器代码 - firebase admin sdk。这里管理员不知道currentPassword,也不需要知道,因为firebase-admin可以更改账户密码,无需发送确认邮件。

        不过,我不感兴趣的是:

        当我第一次创建用户时,firebase 给了我一个userRecord 对象,它有两个属性:passwordHashpasswordSalt。但是由于我无法手动加密给定的密码,那么这两个属性有什么用呢?什么时候需要它们?

        当您将提供的密码的哈希值与存储在 firebase 中的密码哈希值进行比较时,我认为它们是专门设计的。好像不是这样,我还是有点迷茫。

        无论如何,根据执行操作的人员,在客户端和服务器之间拆分密码更新功能,如上所述 - 就像一个魅力。

        注意:此设置还允许由admin / manager 完成帐户创建。

        【讨论】:

        • 你好@Alon,以防你仍然需要这个github.com/firebase/scrypt 可以使用它来登录其他系统,以防从firebase迁移身份验证。
        【解决方案4】:

        我认为您可以使用scrypt 检查密码哈希。您需要从帐户下载scrypt 配置并进行比较。请查看以下文档

        https://firebaseopensource.com/projects/firebase/scrypt/

        scrypt 的 Util 函数(如果在此处找到用于散列和验证)

        https://github.com/xeewi/firebase-scrypt

        注意:只有listUsers() 方法会返回passwordHashgetUser() 或没有其他函数将返回 passwordHash 值。

        【讨论】:

          猜你喜欢
          • 2021-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多