diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java index 4b6f3402..4300e777 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java @@ -119,10 +119,10 @@ public class LoginController extends BaseControllerImpl { /** * 移动端登录 */ - @RequestMapping(value = "/doLogin", method = RequestMethod.GET) + @RequestMapping(value = "/doLogin", method = {RequestMethod.GET, RequestMethod.POST}) public CommonResult doLogin(@RequestParam(name = "user_account", required = false) String user_account, @RequestParam(name = "user_password", required = false) String user_password) { - if (StrUtil.isEmpty(user_account) || StrUtil.isEmpty(user_password)) { + if (StrUtil.isBlank(user_account) || StrUtil.isBlank(user_password)) { return CommonResult.failed(I18nUtil._("用户名或密码不能为空!")); } @@ -256,7 +256,6 @@ public class LoginController extends BaseControllerImpl { String cid = paramJSON.getStr("cid"); String osType = paramJSON.getStr("osType"); - return accountUserBaseService.doMerchSmsRegisterAndLogin(userMobile, randKey, verifyCode, cid, osType); } diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java index e5a2df2f..df585064 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java @@ -4,23 +4,32 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.suisung.mall.account.service.AccountBaseConfigService; import com.suisung.mall.account.service.AccountUserBaseService; +import com.suisung.mall.account.service.AccountUserBindConnectService; import com.suisung.mall.account.service.AccountUserLoginService; +import com.suisung.mall.common.api.BindCode; import com.suisung.mall.common.api.CommonResult; +import com.suisung.mall.common.api.ResultCode; import com.suisung.mall.common.constant.AuthConstant; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.constant.RedisConstant; import com.suisung.mall.common.domain.UserDto; +import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.exception.ApiUserException; import com.suisung.mall.common.modules.account.AccountUserBase; +import com.suisung.mall.common.modules.account.AccountUserBindConnect; import com.suisung.mall.common.service.impl.BaseControllerImpl; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.phone.PhoneNumberUtils; +import com.suisung.mall.core.web.service.RedisService; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -41,6 +50,7 @@ import java.util.stream.Collectors; * @author Xinze * @since 2021-03-30 */ +@Slf4j @Api(tags = "用户基本信息表") @RestController("admin-account-user-base") @RequestMapping("/admin/account/account-user-base") @@ -55,6 +65,12 @@ public class AccountUserBaseController extends BaseControllerImpl { @Autowired private AccountBaseConfigService accountBaseConfigService; + @Autowired + private AccountUserBindConnectService accountUserBindConnectService; + + @Autowired + private RedisService redisService; + /** * 分页列表查询 */ @@ -133,26 +149,83 @@ public class AccountUserBaseController extends BaseControllerImpl { public CommonResult doLogin(@RequestParam(name = "user_account", required = false) String user_account, @RequestParam(name = "user_password", required = false) String user_password, @RequestParam(name = "verify_code") String verificationCode, - @RequestParam(name = "verify_token") String verify_token) { - if (StrUtil.isBlank(user_account) || StrUtil.isBlank(user_password)) { + @RequestParam(name = "verify_token") String verify_token, + @RequestParam(name = "cid", required = false) String cid, + @RequestParam(name = "osType", required = false) String osType) { + if (StringUtils.isAnyBlank(user_account, user_password)) { return CommonResult.failed(I18nUtil._("用户名或密码不能为空!")); } + + // accountUserBaseService.login 里重复代码,为了兼容商家版登录 + String verifyCode = RedisConstant.Verifycode_NameSpace + verify_token + verificationCode; + // 随机数图形验证码,有效期一分钟 + if (StrUtil.isNotBlank(verifyCode) && !redisService.hasKey(verifyCode)) { + //验证码错误 + throw new ApiException(ResultCode.VERIFYCODE_FAILED); + } + // ccountUserBaseService.login 里重复代码,为了兼容商家版登录 + Map params = new HashMap<>(); + + // 商家手机账号登录 + String userMobile = PhoneNumberUtils.convZhPhoneNumber(user_account); + Boolean isMobileAccount = Validator.isNumber(user_account) && PhoneNumberUtils.isValidNumber(userMobile); + if (isMobileAccount) { + AccountUserBindConnect bind_row = accountUserBindConnectService.getBindByBindId(user_account, BindCode.MOBILE, CommonConstant.USER_TYPE_MCH); + if (bind_row != null) { + AccountUserBase accountUserBase = accountUserBaseService.get(bind_row.getUser_id()); + if (accountUserBase == null) { + return CommonResult.failed("获取不到用户信息!"); + } + + + String user_password_entry = SecureUtil.md5(accountUserBase.getUser_salt() + SecureUtil.md5(user_password)); + if (!user_password_entry.equals(accountUserBase.getUser_password())) { + return CommonResult.failed("账号或密码错误!"); + } + +// log.info("bind:{}", bind_row); +// log.info("pwd:{}", "b3d1339eb3948463522cd115094856a5"); +// log.info("salt:{}", accountUserBase.getUser_salt()); +// log.info("npwd:{}, eq?:{}", user_password_entry, user_password_entry.equals("b3d1339eb3948463522cd115094856a5")); + + + // 手机注册的商家账号 + params.put("client_id", AuthConstant.MCH_CLIENT_ID); + params.put("client_secret", AuthConstant.AUTHORITY_MOBILE_SECRET); + params.put("grant_type", "password"); + params.put("verify_pwd", "1001"); // 是否验证密码 1001:不验证;1002:验证(内部登录没有用户明文密码,只能不验证) + params.put("username", userMobile); + params.put("password", ""); + params.put("user_mobile", userMobile); + params.put("is_merch", "1"); // 是否为商家入驻 1-是;其他-否 + + if (StrUtil.isNotBlank(cid)) { + params.put("cid", cid); // 个推客户端Id + params.put("osType", osType);// 个推客系统类别 1-Android;2-iOS;3-微信小程序; + } + + return accountUserBaseService.login(params); + } + } + + + // 非商家手机账号登录 params.put("client_id", AuthConstant.ADMIN_CLIENT_ID); params.put("client_secret", AuthConstant.AUTHORITY_ADMIN_SECRET); params.put("grant_type", "password"); params.put("username", user_account); params.put("password", user_password); - params.put("verify_code", RedisConstant.Verifycode_NameSpace + verify_token + verificationCode); + // 随机数图形验证码,有效期一分钟 + params.put("verify_code", verifyCode); + + CommonResult result = accountUserBaseService.login(params); //user_account判断是否手机号 - if (result.getStatus() != 200 && Validator.isNumber(user_account)) { - user_account = CommonConstant.IDD_ZH_CN + user_account; - if (PhoneNumberUtils.isValidNumber(user_account)) { - //尝试手机号绑定登录 - result = accountUserBaseService.doMobileBindLogin(user_account, user_password); - } + if (result.getStatus() != 200 && isMobileAccount) { + //尝试手机号绑定登录 + result = accountUserBaseService.doMobileBindLogin(userMobile, user_password); } return result; diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index be078b81..b6fa65b9 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -146,7 +146,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl params) { Boolean hasKey = false; - // 短信验证码 + // 随机数图形验证码,有效期一分钟 String verifyCode = params.get("verify_code"); if (StrUtil.isNotBlank(verifyCode)) { hasKey = redisService.hasKey(verifyCode); @@ -198,8 +198,9 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl params2 = new HashMap<>(); // params2.put("user_mobile", params.get("user_mobile")); @@ -2858,8 +2860,9 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl