Browse Source

用户微信code授权改为手机号授权

master
wengding 2 weeks ago
parent
commit
35c0b7e497
  1. 72
      ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java
  2. 5
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysSocial.java
  3. 5
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java
  4. 5
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysSocialVo.java
  5. 13
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java

72
ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java

@ -88,16 +88,8 @@ public class XcxAuthStrategy implements IAuthStrategy {
String username = authUser.getUsername();
authUser.setSource(loginBody.getSource());
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
SysUserVo user = loadUserByOpenid(loginBody.getSource()+openid);
//未找到用户信息 注册
if (user == null && StringUtils.isEmpty(loginBody.getPhoneCode())) {
LoginVo loginVo = new LoginVo();
loginVo.setBindingFlag(false);
return loginVo;
}
else if(user == null && StringUtils.isNotEmpty(loginBody.getPhoneCode())){
if( StringUtils.isNotEmpty(loginBody.getPhoneCode())){
//注册用户
username = SocialUtils
.loginXcxAuthPhone(loginBody.getSource(), loginBody.getPhoneCode(), socialProperties);
authUser.setUsername(username);
@ -106,7 +98,7 @@ public class XcxAuthStrategy implements IAuthStrategy {
registerBody.setUsername(username);
registerBody.setTenantId(loginBody.getTenantId());
SysUserVo sysUserVo = loadUserByUsername(username);
user = new SysUserVo();
SysUserVo user = new SysUserVo();
if(sysUserVo == null){
//手机号注册账号
SysUserBo register = register(registerBody);
@ -116,31 +108,30 @@ public class XcxAuthStrategy implements IAuthStrategy {
}
//注册 第三方
socialRegister(authUser, user.getUserId());
LoginVo loginVo = new LoginVo();
XcxLoginUser loginUser = loginService.buildLoginXcxUser(user);
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
loginUser.setOpenid(openid);
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());
model.setActiveTimeout(client.getActiveTimeout());
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
// 生成token
LoginHelper.login(loginUser, model);
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
loginVo.setClientId(client.getClientId());
loginVo.setOpenid(openid);
loginVo.setBindingFlag(true);
return loginVo;
}else{
throw new ServiceException("未获取到登录手机号");
}
if(user == null){
user = new SysUserVo();
}
LoginVo loginVo = new LoginVo();
XcxLoginUser loginUser = loginService.buildLoginXcxUser(user);
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
loginUser.setOpenid(openid);
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());
model.setActiveTimeout(client.getActiveTimeout());
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
// 生成token
LoginHelper.login(loginUser, model);
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
loginVo.setClientId(client.getClientId());
loginVo.setOpenid(openid);
loginVo.setBindingFlag(true);
return loginVo;
}
private SysUserVo loadUserByOpenid(String authId) {
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
@ -175,7 +166,6 @@ public class XcxAuthStrategy implements IAuthStrategy {
String password = sysConfigService.selectConfigByKey("sys.user.initPassword");
// app用户
String userType = UserType.APP_USER.getUserType();
SysUserBo sysUser = new SysUserBo();
sysUser.setUserName(username);
sysUser.setNickName("微信用户:"+ username.substring(7));
@ -194,8 +184,6 @@ public class XcxAuthStrategy implements IAuthStrategy {
long postId = Long.parseLong(appPostId);
sysUser.setPostIds(new Long[]{postId});
sysUserService.registerUser(sysUser, "000000");
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
return sysUser;
@ -214,14 +202,14 @@ public class XcxAuthStrategy implements IAuthStrategy {
bo.setUnionId(authUserData.getToken().getUnionId());
bo.setUserName(authUserData.getUsername());
bo.setNickName(authUserData.getNickname());
List<SysSocialVo> checkList = sysSocialService.selectByAuthId(authId);
if (CollUtil.isNotEmpty(checkList)) {
throw new ServiceException("此三方账号已经被绑定!");
}
// 查询是否已经绑定用户
SysSocialBo params = new SysSocialBo();
params.setUserId(userId);
//params.setUserId(userId);
params.setUserName(authUserData.getUsername());
params.setOpenId(authUserData.getUuid());
params.setSource(bo.getSource());
bo.setStatus(0L);
List<SysSocialVo> list = sysSocialService.queryList(params);
if (CollUtil.isEmpty(list)) {
// 没有绑定用户, 新增用户信息

5
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysSocial.java

@ -132,5 +132,10 @@ public class SysSocial extends TenantEntity {
*/
private String oauthTokenSecret;
/**
*
* 0开启 1关闭
*/
private Long status;
}

5
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java

@ -138,5 +138,10 @@ public class SysSocialBo extends TenantEntity {
private String oauthTokenSecret;
/**
*
* 0开启 1关闭
*/
private Long status;
}

5
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysSocialVo.java

@ -141,4 +141,9 @@ public class SysSocialVo implements Serializable {
* 创建时间
*/
private Date createTime;
/**
*
* 0开启 1关闭
*/
private Long status;
}

13
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java

@ -2,6 +2,7 @@ package org.dromara.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
@ -46,6 +47,7 @@ public class SysSocialServiceImpl implements ISysSocialService {
public List<SysSocialVo> queryList(SysSocialBo bo) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
.eq(ObjectUtil.isNotNull(bo.getUserId()), SysSocial::getUserId, bo.getUserId())
.eq(ObjectUtil.isNotNull(bo.getStatus()), SysSocial::getStatus, bo.getStatus())
.eq(StringUtils.isNotBlank(bo.getAuthId()), SysSocial::getAuthId, bo.getAuthId())
.eq(StringUtils.isNotBlank(bo.getSource()), SysSocial::getSource, bo.getSource());
return baseMapper.selectVoList(lqw);
@ -90,6 +92,11 @@ public class SysSocialServiceImpl implements ISysSocialService {
*/
private void validEntityBeforeSave(SysSocial entity) {
//TODO 做一些数据校验,如唯一约束
LambdaUpdateWrapper<SysSocial> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(SysSocial::getStatus, 1L);
updateWrapper.eq(SysSocial::getUserId, entity.getUserId());
updateWrapper.eq(SysSocial::getSource, entity.getScope());
baseMapper.update(updateWrapper);
}
@ -124,7 +131,8 @@ public class SysSocialServiceImpl implements ISysSocialService {
public SysSocialVo selectByUserIdAndSource(Long userId, String source) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
.eq(SysSocial::getUserId, userId)
.eq(SysSocial::getSource, source);
.eq(SysSocial::getSource, source)
.eq(SysSocial::getStatus, 0L);
return baseMapper.selectVoOne(lqw);
}
@ -137,7 +145,8 @@ public class SysSocialServiceImpl implements ISysSocialService {
@Override
public SysUserVo queryByAuthId(String authId) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
.eq(SysSocial::getAuthId, authId);
.eq(SysSocial::getAuthId, authId)
.eq(SysSocial::getStatus, 0L);
SysSocialVo sysSocialVo = baseMapper.selectVoOne(lqw);
if(sysSocialVo == null){
return null;

Loading…
Cancel
Save