Просмотр исходного кода

[微信第三方登录][修改]:手机号登录修改

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
fb7d319744
5 измененных файлов: 52 добавлений и 112 удалений
  1. +42
    -91
      mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java
  2. +1
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  3. +1
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java
  4. +1
    -1
      mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java
  5. +7
    -19
      mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java

+ 42
- 91
mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java Просмотреть файл

@@ -189,20 +189,28 @@ public class HomeController extends BaseController {
return data;
}

@GetMapping("sendLoginCode")
@GetMapping("sendLoginPhoneCode")
@ApiImplicitParams({
@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true),
@ApiImplicitParam(name = "type", value = "场景(1:登录)", dataType = "Integer", paramType = "query", required = true)})
public ResultData sendlogincode(String phone, Integer type) {
logger.debug("[" + getIpAddr() + "] HomeController::sendlogincode");
// 1. 检查手机号是否在用户列表里
// 2. 发送手机验证码
// 2.1 如果只找到一个手机号 直接发
// 2.2 如果找到多个,用富茂的发
// 1. 检查手机号是否在用户列表里, 是否只有一个
// 2. 发送手机验证码, 直接发
List<MallUserInfoVo> users = mallUserInfoService.getUserByPhone(phone);
if(users.size() <= 0) {
logger.error(ErrorCode.USER_IS_EMPTY.getMessage());
return new ResultData(ErrorCode.USER_IS_EMPTY);
}
if(users.size() > 1) {
logger.error(ErrorCode.USER_IS_MULTI.getMessage());
return new ResultData(ErrorCode.USER_IS_MULTI);
}
MallUserInfoVo user = users.get(0);
WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode();
wxMsgValidationcode.setPhone(phone);
wxMsgValidationcode.setTenantId(user.getTenantId());
wxMsgValidationcode.setType(type);
// TODO 登录时不知道哪个tenantId
return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode);
}

@@ -221,103 +229,46 @@ public class HomeController extends BaseController {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
}

// check 验证码正确
// TODO
// try {
// return userInfoService.updatepwd(user, code);
// } catch (Exception e) {
// return new ResultData(Result.ERROR, e.getMessage());
// }

// 获取用户信息列表
List<MallUserInfoVo> userList = mallUserInfoService.getUserByPhone(phone);
if(userList.size() == 1) {
// 唯一用户,直接登录即可
MallUserInfoVo user = userList.get(0);
// check 验证码正确
try {
Subject subject = SecurityUtils.getSubject();
UseriFormallToken token = new UseriFormallToken(user.getUsername());
subject.login(token);
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
if(StringUtils.isNotBlank(info.getBopenId()))
info.setBopenId("保密");
if(StringUtils.isNotBlank(info.getWebOpenId())) {
info.setWebOpenId("保密");
info.setWithWechat(true);
boolean isValidCode = mallUserInfoService.checkCodeValid(user, code);
if(isValidCode) {
// 验证码正确,直接登录
try {
Subject subject = SecurityUtils.getSubject();
UseriFormallToken token = new UseriFormallToken(user.getUsername());
subject.login(token);
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
if(StringUtils.isNotBlank(info.getBopenId()))
info.setBopenId("保密");
if(StringUtils.isNotBlank(info.getWebOpenId())) {
info.setWebOpenId("保密");
info.setWithWechat(true);
} else {
info.setWithWechat(false);
}
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
}
return new ResultData(info);
} catch (Exception e) {
return new ResultData(ResultData.ERROR, "用户名或者密码错误");
}
} else {
info.setWithWechat(false);
}
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
}
return new ResultData(info);
} catch (Exception e) {
return new ResultData(ResultData.ERROR, "用户名或者密码错误");
return new ResultData(Result.ERROR, e.getMessage());
}
} else {
// TODO 多个租户,前端界面做选择
return new ResultData();
}
}

@ApiOperation(value = "手机验证码租户登录", notes = "{\"tenantId\",\"string\", \"phone\",\"string\",\"code\",\"string\"}")
@PostMapping("/doLoginByTenantPhone")
public ResultData doLoginByTenantPhone(@RequestBody Map<String, String> params) {
logger.debug("[" + getIpAddr() + "] HomeController::doLoginByTenantPhone");
String tenantId = params.get("tenantId");
String phone = params.get("phone");
String code = params.get("code");

if (StringUtils.isBlank(tenantId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tenantId不能为空");
}
if (StringUtils.isBlank(phone)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "phone不能为空");
}
if (StringUtils.isBlank(code)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
}

MallUserInfo user = mallUserInfoService.getByPhone(phone, tenantId);
if(user == null) {
return new ResultData(ErrorCode.USER_IS_EMPTY);
}

// check 验证码正确
ResultData r = null;
try {
r = mallUserInfoService.checkCodeValid(user, code);
if(r.code != Result.SUCCESS) {
return r;
}
} catch (Exception e) {
return new ResultData(Result.ERROR, e.getMessage());
}

try {
Subject subject = SecurityUtils.getSubject();
UseriFormallToken token = new UseriFormallToken(user.getUsername());
subject.login(token);
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
if(StringUtils.isNotBlank(info.getBopenId()))
info.setBopenId("保密");
if(StringUtils.isNotBlank(info.getWebOpenId())) {
info.setWebOpenId("保密");
info.setWithWechat(true);
} else {
info.setWithWechat(false);
}
String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
}
return new ResultData(info);
} catch (Exception e) {
return new ResultData(ResultData.ERROR, "用户名或者密码错误");
}
}

@ApiOperation("登出")


+ 1
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Просмотреть файл

@@ -59,6 +59,7 @@ public enum ErrorCode{
/**
* 用户2000-2099
*/
USER_IS_MULTI(1988, "有多个手机号,请联系富茂管理员"),
USER_IS_NOT_MEMBER(1989,"用户还未授权手机号成为会员"),
USER_PHONE_IS_NOT_FOUND(1990,"手机号不存在"),
USER_DEL_SELF(1991,"用户删除自己"),


+ 1
- 1
mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java Просмотреть файл

@@ -11,7 +11,7 @@ public enum EnumMsgModel {
FLOW_APPLY_NODIFY(3, "审批通知"),
FLOW_PASS_NODIFY(4, "通过审批通知"),
FLOW_REJECT_NODIFY(5, "驳回通知"),
VALIDATION_CODE(6, "B端验证码"),
VALIDATION_CODE(6, "验证码"),
BILL_WAIT_PAY(7, "账单待缴通知"),
BILL_OWE(8, "账单欠缴通知")
;


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java Просмотреть файл

@@ -82,7 +82,7 @@ public interface MallUserInfoService {

ResultData updatepwd(MallUserInfo user, String code);

ResultData checkCodeValid(MallUserInfo user, String code);
boolean checkCodeValid(MallUserInfo user, String code);

/**
* 根据phone获得实体


+ 7
- 19
mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java Просмотреть файл

@@ -15,6 +15,7 @@ import com.iformall.mapper.MallUserInfoMapper;
import com.iformall.mapper.MallUserRoleMapper;
import com.iformall.mapper.WxMsgValidationcodeMapper;
import com.iformall.service.MallUserInfoService;
import net.sf.saxon.trans.Err;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -176,15 +177,7 @@ public class MallUserInfoServiceImpl implements MallUserInfoService {

@Override
public ResultData updatepwd(MallUserInfo user, String code) {
WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode();
wxMsgValidationcode.setTenantId(user.getTenantId());
wxMsgValidationcode.setPhone(user.getPhone());
wxMsgValidationcode.setCode(code);
List<WxMsgValidationcode> wxmsgvalidationcodelist = wxMsgValidationcodeMapper.findList(wxMsgValidationcode);
Date currentdate = new Date();
wxmsgvalidationcodelist = wxmsgvalidationcodelist.stream().filter(validationcode ->
validationcode.getExpiretime().after(currentdate)).collect(Collectors.toList());
if (wxmsgvalidationcodelist.size() > 0) {
if(checkCodeValid(user, code)) {
try {
mallUserInfoMapper.updateByPrimaryKey(user);
} catch (Exception e) {
@@ -192,20 +185,15 @@ public class MallUserInfoServiceImpl implements MallUserInfoService {
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
}
} else {
return new ResultData(Result.ERROR,"验证码不存在或过期",false);
return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND, false);
}
return new ResultData();
}

@Override
public ResultData checkCodeValid(MallUserInfo user, String code) {
public boolean checkCodeValid(MallUserInfo user, String code) {
WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode();
if(StringUtils.isNotBlank(user.getTenantId())) {
wxMsgValidationcode.setTenantId(user.getTenantId());
} else {
// 如果为空, 启用富茂(标准)
wxMsgValidationcode.setTenantId("1");
}
wxMsgValidationcode.setTenantId(user.getTenantId());
wxMsgValidationcode.setPhone(user.getPhone());
wxMsgValidationcode.setCode(code);
List<WxMsgValidationcode> wxmsgvalidationcodelist = wxMsgValidationcodeMapper.findList(wxMsgValidationcode);
@@ -213,9 +201,9 @@ public class MallUserInfoServiceImpl implements MallUserInfoService {
wxmsgvalidationcodelist = wxmsgvalidationcodelist.stream().filter(validationcode ->
validationcode.getExpiretime().after(currentdate)).collect(Collectors.toList());
if (wxmsgvalidationcodelist.size() > 0) {
return new ResultData();
return true;
} else {
return new ResultData(Result.ERROR,"验证码不存在或过期",false);
return false;
}
}



Загрузка…
Отмена
Сохранить