如何验证用户当前密码?

Posted

技术标签:

【中文标题】如何验证用户当前密码?【英文标题】:How to verify users current password? 【发布时间】:2017-04-27 18:02:06 【问题描述】:

所以,也许我在文档的某个地方错过了这个,但我找不到任何类似的东西。

我不希望我的用户必须输入他们当前的密码才能创建新密码。据我了解,如果用户经过身份验证,他可以在不提供当前密码的情况下更新他的密码。

即使这可能有点安全,我宁愿让他输入他的旧密码,以防止人们继续进行已经过身份验证的会话,例如家人或其他人并更改密码。

有什么办法吗?

(我使用 Admin SDK 没有问题,因为我已经为这类事情设置了服务器)

【问题讨论】:

您通常会在代码中强制执行此行为。您是否允许用户访问控制台?你的代码库是什么? 据我所知,firebase 不会向我提供用户密码,这是可以理解的,我只需要验证。不,我的用户只有电子邮件/密码,并且通常通过 firebase 方法signInWithEmailAndPassword() 进行身份验证。我在服务器端使用 Node,如果有任何问题,我会在客户端做出反应。 【参考方案1】:

更新:(使用 - reauthenticateWithCredential)

var user = firebaseApp.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(
  firebase.auth().currentUser.email,
  providedPassword
);

// Prompt the user to re-provide their sign-in credentials

user.reauthenticateWithCredential(credential).then(function() 
  // User re-authenticated.
).catch(function(error) 
  // An error happened.
);

以前的版本

您可以使用重新验证 API 来执行此操作。我假设您想在允许用户更新它之前验证当前用户的密码。因此,在网络中,您可以执行以下操作:

reauthenticateAndRetrieveDataWithCredential- 已弃用

firebase.auth().currentUser.reauthenticateAndRetrieveDataWithCredential(
  firebase.auth.EmailAuthProvider.credential(
    firebase.auth().currentUser.email, 
    providedPassword
  )
);

如果成功,则可以调用

firebase.auth().currentUser.updatePassword(newPassword);

【讨论】:

firebase.User.prototype.reauthenticate 已被删除,取而代之的是 firebase.User.prototype.reauthenticateWithCredential。所以使用 reauthenticateWithCredential 像这样复制粘贴 sn-p 真是太有趣了……谢谢 :) reauthenticateAndRetrieveDataWithCredential 现在已弃用。使用 reauthenticateWithCredential 如果帐户因错误尝试次数过多而被阻止怎么办?用户无法再登录您的应用程序,因为他想更改密码 这是否仍然为客户端打开选项以通过 firebase api 更新他的密码而无需访问我的服务器? (通过 api 而不是我的 UI)。此解决方案是否真的强制用户提供旧密码?

以上是关于如何验证用户当前密码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用当前 Windows 登录用户验证 UWP 应用程序

在 JAVA 中通过身份验证后如何获取 okta 用户详细信息/当前会话

6、ElasticSearch添加密码验证机制(规避了诸多小坑的操作步骤)

linux无法切换到超级用户

如果用户已经无密码登录,firebase 可以设置密码身份验证吗?

无密码身份验证如何保障用户隐私安全?