如何在firease admin sdk中检查当前密码是否有效?

时间:2018-01-07 21:06:40

标签: firebase firebase-authentication firebase-admin

我有一个基于firebase的应用程序。要求输入currentPasswordnewPassword 更新帐户密码

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

首次创建帐户时, firebase会自动加密密码,并仅返回哈希值。

问题是 - 此加密是在封面下自动完成的

如果无法访问加密方法,我无法获取currentPassword的哈希值,以便将其与真实密码的存储哈希值进行比较..以查看此2哈希值是否匹配。

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

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

4 个答案:

答案 0 :(得分:1)

我不太确定您是否可以使用云功能验证密码,重点是确保黑客无法恢复用户的密码,即使他们以某种方式入侵服务器,如果您可以恢复通过了解哈希和盐的密码,他们为什么不是黑客?但是,您可以在自己的应用中执行此操作:

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

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

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

答案 1 :(得分:1)

仅当您通过致电passwordHash检索用户信息时,

passwordSaltlistUsers()才可用。因此,只有将用户数据从Firebase Auth迁移到其他用户管理系统时,它们才有用。

答案 2 :(得分:0)

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

agent更改自己的密码时,

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

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

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

我使用服务器代码 - firebase admin sdk。在这里,经理不知道currentPassword,并且不需要知道,因为firebase-admin可以更改帐户密码,而无需发送确认电子邮件。

不过,我不感兴趣的是:

当我第一次创建用户时,firebase会为我提供一个userRecord对象,该对象包含2个属性:passwordHashpasswordSalt。但由于我无法手动加密给定的密码,那么这2个属性的用途是什么?他们什么时候需要?

我认为它们是专门为比较提供的密码的哈希值而设计的 - 与存储在firebase中的密码哈希值。似乎情况并非如此,我仍然感到困惑。

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

注意:此设置也允许admin / manager创建帐户。

答案 3 :(得分:0)

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

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

如果在此处找到scrypt的实用函数以进行哈希和验证

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

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