如何解决如何检查 currentPassword 以允许用户更改密码
- 我想做:
1.用户选择新密码。
问题:我不知道如何获取他当前的密码以检查其是否正确
-
在我的客户端,我保存了他的 hashPassword ("lfds7fdhas784n23489h42")
所以我不能做这样的事情:
如果 state.user.password===currentPassword 因为我没有它的状态密码
-
我需要从服务器获取他的密码并检查它,或者我需要发送 currentPassword 到后端并在那里检查,但我不知道如何实现它...
代码:
-
更新密码的表单(为了更好地理解而使用快捷方式):
<TextInput placeholder"NewPassword" onChangeText={setNewPass}/> <TextInput placeholder"currentPassword" onChangeText={setCurrentPass}/> updateUserPssword(state.userId,token,param,value);
-
密码更新函数: const updateUserPssword = dispatch => async (userId,newPass,currentPass) => {
try { const res = await indexApi.put( `/user/${userId}`,{ password: newPass,},{ headers: { Authorization: `Bearer ${token}`,} ); }
解决方法
您应该在服务器端操纵您对密码的所有操作。这是正确的流程
- 用户输入新密码(不要散列)
- 用户输入相同的密码进行确认(如果 fieldA.value == fieldB.value,您只能在客户端进行比较)
- 用户输入旧密码
- 您将新密码和旧密码以明文形式发送到服务器,无需散列。
- 服务器使用相同的 SALT 散列您的旧密码,并比较生成的散列是否等于存储在数据库中的散列。这是关键时刻,您无需对存储的密码进行解码并比较普通密码。
P.S 每次用相同的盐散列一些东西都会给你 相同的结果。
// Pseudo code
decodeHash(passwordInDatabase) == oldPassword // incorrect + impossible
hash(oldPassword) == passwordInDatabase // correct
- 如果相等,后端会散列您的新密码并在数据库中更新。
- 从后端返回成功或错误消息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。