{"record":{"id":"bc6ba13ca9252904","repo":"paascloud/paascloud-master","slug":"uac10011032","errorCode":"UAC10011032","errorMessage":"邮箱不存在, loginName=%s,email=%s","messagePattern":"邮箱不存在, loginName=(.+?),email=(.+?)","errorType":"error_code","errorClass":"UacBizException","httpStatus":null,"severity":"error","filePath":"paascloud-provider/paascloud-provider-uac/src/main/java/com/paascloud/provider/service/impl/UacUserServiceImpl.java","lineNumber":880,"sourceCode":"\t\tPreconditions.checkArgument(!StringUtils.isEmpty(email), ErrorCodeEnum.UAC10011018.msg());\n\t\tPreconditions.checkArgument(!StringUtils.isEmpty(loginPwd), ErrorCodeEnum.UAC10011014.msg());\n\t\tPreconditions.checkArgument(!StringUtils.isEmpty(forgetToken), \"非法操作\");\n\t\tPreconditions.checkArgument(!StringUtils.isEmpty(emailCode), \"验证码不能为空\");\n\n\t\t// 验证token\n\t\tString key = RedisKeyUtil.getResetPwdTokenKey(email);\n\t\tString forgetKey = redisService.getKey(key);\n\n\t\ttry {\n\t\t\tHttpAesUtil.decrypt(forgetToken, forgetKey, false, forgetKey);\n\t\t} catch (Exception e) {\n\t\t\tthrow new UacBizException(ErrorCodeEnum.UAC10011031);\n\t\t}\n\n\t\tint count = this.countUserByLoginNameAndEmail(loginName, email);\n\t\t// 校验token\n\t\tif (count < 1) {\n\t\t\tthrow new UacBizException(ErrorCodeEnum.UAC10011032, loginName, email);\n\t\t}\n\t}\n\n\t/**\n\t * 删除用户菜单表\n\t */\n\tprivate int deleteUserMenuList(UacUserMenu uacUserMenu) {\n\t\tint selCount = uacUserMenuMapper.selectCount(uacUserMenu);\n\t\t// 如果查询结果为空, 默认认为已删除成功\n\t\tif (selCount < 1) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tint delCount = uacUserMenuMapper.delete(uacUserMenu);\n\t\tif (delCount < selCount) {\n\t\t\tlogger.error(\"清空该用户常用菜单失败 delCount = {} selCount = {}\", delCount, selCount);\n\t\t\tthrow new UacBizException(ErrorCodeEnum.UAC10011033);\n\t\t}","sourceCodeStart":862,"sourceCodeEnd":898,"githubUrl":"https://github.com/paascloud/paascloud-master/blob/781281a9503332ed3cef44ea618349d14230a127/paascloud-provider/paascloud-provider-uac/src/main/java/com/paascloud/provider/service/impl/UacUserServiceImpl.java#L862-L898","documentation":"UAC10011032 is thrown at the end of the reset-password token validation: after decrypting the token, countUserByLoginNameAndEmail(loginName, email) returns < 1, meaning no user row matches both the submitted login name and email. The token may be valid, but the form's loginName/email pair does not correspond to any account.","triggerScenarios":"User typed a loginName that differs from the one registered with that email (or vice versa); whitespace/case differences in the form values; the account was deleted after the code was issued; attempting reset on an environment whose DB lacks the user.","commonSituations":"Users with multiple accounts mixing up which loginName goes with which email; leading/trailing spaces from copy-paste; testing against a stale local DB.","solutions":["Confirm the pair exists: SELECT COUNT(*) FROM uac_user WHERE login_name = ? AND email = ?; fix the submitted values.","Trim/lowercase the loginName/email inputs before countUserByLoginNameAndEmail.","Use the 'forgot login name' flow to recover the correct pair instead of guessing.","Return a user-facing message advising to check both fields; do not reveal which field mismatched."],"exampleFix":"// before\nint count = this.countUserByLoginNameAndEmail(loginName, email);\n// after\nString ln = loginName == null ? null : loginName.trim();\nString em = email == null ? null : email.trim().toLowerCase();\nint count = this.countUserByLoginNameAndEmail(ln, em);","handlingStrategy":"validation","validationCode":"int count = countUserByLoginNameAndEmail(loginName.trim(), email.trim().toLowerCase());\nif (count < 1) {\n    return Result.fail(\"login name and email do not match any account\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    resetPwdService.validateResetToken(loginName, email);\n} catch (UacBizException e) {\n    if (\"UAC10011032\".equals(e.getCode())) { return Result.fail(400, \"login name/email pair not found\"); }\n    throw e;\n}","preventionTips":["Trim and lowercase inputs before matching.","Remind users which loginName is registered with each email (account-recovery flow).","Don't reveal which field mismatched — return one generic message.","Clean up deleted accounts' outstanding reset tokens to avoid confusing states."],"tags":["user-management","not-found","reset-password"],"backgroundTag":"user-not-found","analyzedSha":"781281a9503332ed3cef44ea618349d14230a127","analyzedAt":"2026-09-10T10:59:02.070Z","contentChangedAt":"2026-09-10T10:59:02.070Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}