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

update password logic.

parent 0d3ac973
...@@ -10,4 +10,7 @@ public class LoginReq { ...@@ -10,4 +10,7 @@ public class LoginReq {
@NotNull(message = "登录类型必填") @NotNull(message = "登录类型必填")
private Integer type; private Integer type;
private JSONObject data; private JSONObject data;
//是否需要用户资料
private boolean attachInfo;
} }
...@@ -10,4 +10,6 @@ public class LoginBean extends AuthBean{ ...@@ -10,4 +10,6 @@ public class LoginBean extends AuthBean{
private String openId; private String openId;
private String unionId; private String unionId;
private UserInfo info; private UserInfo info;
private Integer tenantId;
} }
package cn.quantgroup.xyqb.service.v2; package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq; 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.UserTag;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.event.UserLoginEvent; import cn.quantgroup.xyqb.event.UserLoginEvent;
import cn.quantgroup.xyqb.model.LoginBean; import cn.quantgroup.xyqb.model.LoginBean;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct; import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam; 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 cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -19,9 +27,17 @@ import java.util.Map; ...@@ -19,9 +27,17 @@ import java.util.Map;
public class LoginContext { public class LoginContext {
private final Map<Integer, LoginStrategy> loginStrategyMap = new HashMap<>(); private final Map<Integer, LoginStrategy> loginStrategyMap = new HashMap<>();
private final ApplicationEventPublisher applicationEventPublisher; 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.applicationEventPublisher = applicationEventPublisher;
this.wechatService = wechatService;
this.userRepository = userRepository;
this.userInfoRepository = userInfoRepository;
loginStrategies.forEach(i -> loginStrategyMap.put(i.getType(), i)); loginStrategies.forEach(i -> loginStrategyMap.put(i.getType(), i));
} }
...@@ -34,6 +50,7 @@ public class LoginContext { ...@@ -34,6 +50,7 @@ public class LoginContext {
//第二步、执行登录操作 //第二步、执行登录操作
LoginBean loginBean = loginStrategy.login(loginParam); LoginBean loginBean = loginStrategy.login(loginParam);
//第三步、发送登录成功消息 //第三步、发送登录成功消息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession(); SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
...@@ -46,6 +63,28 @@ public class LoginContext { ...@@ -46,6 +63,28 @@ public class LoginContext {
UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId); UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId);
applicationEventPublisher.publishEvent(userLoginEvent); 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; return loginBean;
} }
} }
...@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.v2; ...@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.constant.enums.LoginType; import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq; import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException; import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum; import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.model.AuthBean; import cn.quantgroup.xyqb.model.AuthBean;
...@@ -11,17 +12,20 @@ import cn.quantgroup.xyqb.model.LoginProperties; ...@@ -11,17 +12,20 @@ import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct; import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam; import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.model.v2.login.PhonePasswordLoginParam; import cn.quantgroup.xyqb.model.v2.login.PhonePasswordLoginParam;
import cn.quantgroup.xyqb.repository.IGeetestLogRepository;
import cn.quantgroup.xyqb.repository.IUserRepository; import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.captcha.IGeetestLogService; import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.ILockIpv4Service; import cn.quantgroup.xyqb.service.user.ILockIpv4Service;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder; import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.BctyptPasswordUtil; import cn.quantgroup.xyqb.util.BctyptPasswordUtil;
import cn.quantgroup.xyqb.util.PasswordUtil; import cn.quantgroup.xyqb.util.PasswordUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* 账号密码登录 * 账号密码登录
*/ */
...@@ -32,13 +36,13 @@ public class PhonePasswordLoginStrategy implements LoginStrategy { ...@@ -32,13 +36,13 @@ public class PhonePasswordLoginStrategy implements LoginStrategy {
private final ILockIpv4Service lockIpv4Service; private final ILockIpv4Service lockIpv4Service;
private final ISessionService sessionService; 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.userRepository = userRepository;
this.lockIpv4Service = lockIpv4Service; this.lockIpv4Service = lockIpv4Service;
this.sessionService = sessionService; this.sessionService = sessionService;
this.geetestLogService = geetestLogService;
} }
@Override @Override
...@@ -90,17 +94,20 @@ public class PhonePasswordLoginStrategy implements LoginStrategy { ...@@ -90,17 +94,20 @@ public class PhonePasswordLoginStrategy implements LoginStrategy {
//尝试解锁 //尝试解锁
lockIpv4Service.unLockPhone(phonePasswordLoginParam.getPhone()); 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()); AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),sessionStruct.getTenantId());
LoginBean loginBean = new LoginBean();
if (authBean != null) { if (authBean != null) {
authBean.setRegister(false); 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:统一处理行为验证逻辑 return loginBean;
// if (geetestLogId != null) {
// geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId());
// }
return null;
} }
@Override @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