Browse Source

bugfix: 商家端修改密码因数据库密码加密报原密码错误bug

penghao 2 tháng trước cách đây
mục cha
commit
c0815b22f2

+ 11 - 8
alien-store/src/main/java/shop/alien/store/service/impl/StoreUserServiceImpl.java

@@ -252,10 +252,12 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
     public Map<String, String> changePhoneVerification(String phone, String oldPassword, String verificationCode) {
         Map<String, String> changePhoneMap = new HashMap<>();
         if (oldPassword != null && !oldPassword.equals("")) {
-            LambdaUpdateWrapper<StoreUser> userLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
-            userLambdaUpdateWrapper.eq(StoreUser::getPhone, phone);
-            StoreUser storeUser = this.getOne(userLambdaUpdateWrapper);
-            if (storeUser.getPassword().equals(oldPassword)) {
+            LambdaQueryWrapper<StoreUser> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            userLambdaQueryWrapper.eq(StoreUser::getPhone, phone);
+            StoreUser storeUser = this.getOne(userLambdaQueryWrapper);
+            // 由于password字段使用了EncryptTypeHandler,查询时密码会被自动解密
+            // 所以这里直接比较解密后的密码和用户输入的明文密码
+            if (storeUser != null && storeUser.getPassword() != null && storeUser.getPassword().equals(oldPassword)) {
                 changePhoneMap.put("passwordStatus", "1");
                 return changePhoneMap;
             } else {
@@ -269,7 +271,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
     }
 
     private void passwordVerification(String phone, String password, String newPassword, String confirmNewPassword) {
-        LambdaUpdateWrapper<StoreUser> wrapperFans = new LambdaUpdateWrapper<>();
+        LambdaQueryWrapper<StoreUser> wrapperFans = new LambdaQueryWrapper<>();
         wrapperFans.eq(StoreUser::getPhone, phone);
         StoreUser storeUser = this.getOne(wrapperFans);
         if (!newPassword.equals(confirmNewPassword)) {
@@ -280,9 +282,10 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
             log.info("该手机号没有注册过账户");
             throw new RuntimeException("该手机号没有注册过账户");
         } else {
-            wrapperFans.eq(StoreUser::getPassword, password);
-            StoreUser storeUserPw = this.getOne(wrapperFans);
-            if (storeUserPw == null || storeUserPw.getPassword().equals("")) {
+            // 由于password字段使用了EncryptTypeHandler,查询时密码会被自动解密
+            // 所以这里直接比较解密后的密码和用户输入的明文密码
+            String dbPassword = storeUser.getPassword();
+            if (dbPassword == null || dbPassword.isEmpty() || !dbPassword.equals(password)) {
                 log.info("原密码错误");
                 throw new RuntimeException("原密码错误");
             }