package cn.mb.cloud.auth.security.social.handler;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.mb.cloud.auth.security.entity.User;
|
import cn.mb.cloud.auth.security.service.IUserService;
|
import cn.mb.cloud.common.api.vo.UserVO;
|
import cn.mb.cloud.common.cache.RedisFastJsonTemplate;
|
import cn.mb.cloud.common.core.constant.CacheConstants;
|
import cn.mb.cloud.common.core.constant.enums.LoginTypeEnum;
|
import cn.mb.cloud.common.core.exception.ValidateCodeException;
|
import cn.mb.cloud.common.core.util.WebUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import lombok.AllArgsConstructor;
|
import lombok.SneakyThrows;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Component;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
/**
|
* @author jason
|
* @date 2018/11/18
|
*/
|
@Slf4j
|
@Component("SMS")
|
@AllArgsConstructor
|
public class SmsLoginHandler extends AbstractLoginHandler {
|
|
private final IUserService userService;
|
private final RedisFastJsonTemplate redisTemplate;
|
|
/**
|
* 验证码登录传入为手机号 不用不处理
|
*
|
* @param mobile
|
* @return
|
*/
|
@Override
|
public String identify(String mobile) {
|
return mobile;
|
}
|
|
|
@Override
|
public Boolean check(String loginStr) {
|
checkCode(loginStr, WebUtils.getRequest());
|
return Boolean.TRUE;
|
}
|
|
/**
|
* 通过mobile 获取用户信息
|
*
|
* @param identify
|
* @return
|
*/
|
@Override
|
public UserVO info(String identify, String threeAvatar, String threeName) {
|
//进行收集号码等
|
User user = userService.getOne(Wrappers.<User>query().lambda()
|
.eq(User::getUsername, identify)
|
.eq(User::getDelFlag, 0));
|
|
if (user == null) {
|
log.info("手机号未注册:{}", identify);
|
return null;
|
}
|
UserVO userVO = new UserVO();
|
BeanUtils.copyProperties(user, userVO);
|
return userVO;
|
}
|
|
/**
|
* 检查code
|
*
|
* @param request
|
*/
|
@SneakyThrows
|
private void checkCode(String loginStr, HttpServletRequest request) {
|
String code = request.getParameter("code");
|
|
if (StrUtil.isBlank(code)) {
|
throw new ValidateCodeException("验证码不能为空");
|
}
|
|
String key = CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + loginStr;
|
if (!redisTemplate.hasKey(key)) {
|
throw new ValidateCodeException("验证码不合法");
|
}
|
|
Object codeObj = redisTemplate.opsForValue().get(key);
|
|
if (codeObj == null) {
|
throw new ValidateCodeException("验证码不合法");
|
}
|
|
String saveCode = codeObj.toString();
|
if (StrUtil.isBlank(saveCode)) {
|
redisTemplate.delete(key);
|
throw new ValidateCodeException("验证码不合法");
|
}
|
|
if (!StrUtil.equals(saveCode, code)) {
|
redisTemplate.delete(key);
|
throw new ValidateCodeException("验证码不合法");
|
}
|
|
redisTemplate.delete(key);
|
}
|
|
}
|