Commit 07cb37a7 authored by 王亮's avatar 王亮

update password logic.

parent 0d3ac973
......@@ -10,4 +10,7 @@ public class LoginReq {
@NotNull(message = "登录类型必填")
private Integer type;
private JSONObject data;
//是否需要用户资料
private boolean attachInfo;
}
......@@ -10,4 +10,6 @@ public class LoginBean extends AuthBean{
private String openId;
private String unionId;
private UserInfo info;
private Integer tenantId;
}
package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserInfoEntity;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.event.UserLoginEvent;
import cn.quantgroup.xyqb.model.LoginBean;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.repository.IUserInfoRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
......@@ -19,9 +27,17 @@ import java.util.Map;
public class LoginContext {
private final Map<Integer, LoginStrategy> loginStrategyMap = new HashMap<>();
private final ApplicationEventPublisher applicationEventPublisher;
private final IWechatService wechatService;
public LoginContext(List<LoginStrategy> loginStrategies, ApplicationEventPublisher applicationEventPublisher) {
private final IUserRepository userRepository;
private final IUserInfoRepository userInfoRepository;
public LoginContext(List<LoginStrategy> loginStrategies, ApplicationEventPublisher applicationEventPublisher, IWechatService wechatService, IUserRepository userRepository, IUserInfoRepository userInfoRepository) {
this.applicationEventPublisher = applicationEventPublisher;
this.wechatService = wechatService;
this.userRepository = userRepository;
this.userInfoRepository = userInfoRepository;
loginStrategies.forEach(i -> loginStrategyMap.put(i.getType(), i));
}
......@@ -34,6 +50,7 @@ public class LoginContext {
//第二步、执行登录操作
LoginBean loginBean = loginStrategy.login(loginParam);
//第三步、发送登录成功消息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
......@@ -46,6 +63,28 @@ public class LoginContext {
UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId);
applicationEventPublisher.publishEvent(userLoginEvent);
//第四步,补充相关信息
if (loginBean.getUserId() != null) {
User user = userRepository.findByIdAndTenantId(loginBean.getUserId(), loginBean.getTenantId());
if (StringUtils.isEmpty(loginBean.getOpenId())) {
List<WechatUserInfo> wechatUserInfos = wechatService.queryListByUserId(user.getId(), user.getTenantId());
if (CollectionUtils.isNotEmpty(wechatUserInfos)) {
wechatUserInfos.stream().filter(i -> sessionStruct.getRegisteredFrom().equals(i.getRegisteredFrom())).forEach(i -> {
loginBean.setOpenId(i.getOpenId());
loginBean.setUnionId(i.getUnionId());
});
}
}
if (loginReq.isAttachInfo()) {
UserInfoEntity userInfoEntity = userInfoRepository.findByUserIdAndTenantId(loginBean.getUserId(), loginBean.getTenantId());
loginBean.setInfo(new UserInfo(user, userInfoEntity));
}
}
return loginBean;
}
}
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.model.AuthBean;
......@@ -11,17 +12,20 @@ import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.model.v2.login.PhonePasswordLoginParam;
import cn.quantgroup.xyqb.repository.IGeetestLogRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.ILockIpv4Service;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.BctyptPasswordUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 账号密码登录
*/
......@@ -32,13 +36,13 @@ public class PhonePasswordLoginStrategy implements LoginStrategy {
private final ILockIpv4Service lockIpv4Service;
private final ISessionService sessionService;
private final IGeetestLogService geetestLogService;
public PhonePasswordLoginStrategy(IUserRepository userRepository, ILockIpv4Service lockIpv4Service, ISessionService sessionService, IGeetestLogService geetestLogService) {
public PhonePasswordLoginStrategy(IUserRepository userRepository, ILockIpv4Service lockIpv4Service, ISessionService sessionService) {
this.userRepository = userRepository;
this.lockIpv4Service = lockIpv4Service;
this.sessionService = sessionService;
this.geetestLogService = geetestLogService;
}
@Override
......@@ -90,17 +94,20 @@ public class PhonePasswordLoginStrategy implements LoginStrategy {
//尝试解锁
lockIpv4Service.unLockPhone(phonePasswordLoginParam.getPhone());
LoginProperties loginProperties = new LoginProperties(1,Long.valueOf(sessionStruct.getRegisteredFrom()),sessionStruct.getTenantId());
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(),sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),sessionStruct.getTenantId());
LoginBean loginBean = new LoginBean();
if (authBean != null) {
authBean.setRegister(false);
loginBean.setToken(authBean.getToken());
loginBean.setPhoneNo(authBean.getPhoneNo());
loginBean.setUuid(authBean.getUuid());
loginBean.setHasPassword(authBean.isHasPassword());
loginBean.setRegister(authBean.getRegister());
loginBean.setUserId(user.getId());
loginBean.setTenantId(user.getTenantId());
}
//TODO:统一处理行为验证逻辑
// if (geetestLogId != null) {
// geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId());
// }
return null;
return loginBean;
}
@Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment