firebase - 使用 Firebase 的 REST Auth API 更改密码
问题描述
我一直在使用Firebase 的 REST Auth API,到目前为止一切都很好。
我正在尝试实现密码更改功能(不是 reset, change),并且我想向用户询问当前密码,对其进行验证,然后允许他们设置新密码。阅读文档,我看到我可以采取两种方法:
使用密码重新登录并检查 200 返回码。这样做的问题是前一个
idToken
会过期,我将不得不重置我的 Redux 状态——这还不错。我知道我可以获得用户的密码哈希,如果有办法获得 Firebase 的哈希算法,应用它,并与数据库的密码哈希进行比较,我也可以验证密码。这种方法似乎需要做很多工作。
有没有更直接的方法,还是我最好坚持选项 1?
解决方案
方法一:
要求用户输入密码听起来不错,但这是多余的,重置密码的 API 调用不依赖于此。因此,任何人都可以直接发出 API 请求来更改密码。
方法二:
这种听起来对我来说太过分了。此外,您还必须使用scrypt处理复杂的流程,并且仍然存在有人绕过它的机会。
我会采用方法一,但为了防止有人绕过它,我将在云功能中执行密码重置部分。因为您获得的是用户输入密码后刚刚生成的新令牌,所以您可以auth_time
在 Cloud 函数中比较令牌创建(属性)的时间戳。如果超过 N 分钟,要求用户再次输入密码。
decoded id token的auth_time
属性是自 Unix 纪元以来发生最终用户身份验证的时间,以秒为单位。您还可以使用iat
哪个是颁发此 ID 令牌的时间,但该令牌可能属于较旧的会话(当用户未输入密码时)。
然后,您可以使用 Firebase Admin SDK 的updateUser方法更新用户密码。
请注意,这不会阻止从用户已登录的设备获取 ID 令牌的任何人直接使用 REST API 更改密码。这只是获得所需密码更改流程的一种解决方法。防止任何恶意用户对其设备进行物理访问取决于用户。
推荐阅读
- c++ - 插入排序对数组进行中途排序
- javascript - 为什么我不能正常工作按钮开始时间?
- javascript - 通过 Active-Directory 自动登录网站
- c++ - 修改顺序是否有助于发生之前的关系?
- .net - dotnet new(未找到 wpf)Visual Studio 2019
- reactjs - react redux-beacon 跟踪链接点击分析
- r - ggsignif 包错误 stat_signif 需要以下缺失的美学:y
- excel - 如果内容被用户删除,则用 VBA 填充单元格
- ruby-on-rails - ActiveRecord 中的 .hash
- javascript - 每个请求生成相同的跟踪代码