微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查 currentPassword 以允许用户更改密码

如何解决如何检查 currentPassword 以允许用户更改密码

我正在尝试实现“用户更改密码”功能

  • 我想做:

1.用户选择新密码。

2.用户需要输入当前密码才能修改

3.如果用户当前密码正确->修改密码

问题:我不知道如何获取他当前的密码以检查其是否正确

  • 在我的客户端,我保存了他的 hashPassword ("lfds7fdhas784n23489h42")

    所以我不能做这样的事情:

    如果 state.user.password===currentPassword 因为我没有它的状态密码

  • 我需要从服务器获取他的密码并检查它,或者我需要发送 currentPassword 到后端并在那里检查,但我不知道如何实现它...

代码

  1. 更新密码的表单(为了更好地理解而使用快捷方式):

      <TextInput
      placeholder"NewPassword"
      onChangeText={setNewPass}/>
    
      <TextInput
      placeholder"currentPassword"
      onChangeText={setCurrentPass}/>
    
      updateUserPssword(state.userId,token,param,value);
    
  2. 密码更新函数: const updateUserPssword = dispatch => async (userId,newPass,currentPass) => {

     try {
     const res = await indexApi.put(
         `/user/${userId}`,{
             password: newPass,},{
             headers: {
                 Authorization: `Bearer ${token}`,}
     );
     }
    

解决方法

您应该在服务器端操纵您对密码的所有操作。这是正确的流程

  1. 用户输入新密码(不要散列)
  2. 用户输入相同的密码进行确认(如果 fieldA.value == fieldB.value,您只能在客户端进行比较)
  3. 用户输入旧密码
  4. 您将新密码和旧密码以明文形式发送到服务器,无需散列。
  5. 服务器使用相同的 SALT 散列您的旧密码,并比较生成的散列是否等于存储在数据库中的散列。这是关键时刻,您无需对存储的密码进行解码并比较普通密码。

P.S 每次用相同的盐散列一些东西都会给你 相同的结果。

// Pseudo code
decodeHash(passwordInDatabase) == oldPassword // incorrect + impossible
hash(oldPassword) == passwordInDatabase // correct
  1. 如果相等,后端会散列您的新密码并在数据库中更新。
  2. 从后端返回成功或错误消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。