diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java index 6386d17..1ceb8ea 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java +++ b/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 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 list = sysSocialService.queryList(params); if (CollUtil.isEmpty(list)) { // 没有绑定用户, 新增用户信息 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysSocial.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysSocial.java index 10f2936..29d05fc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysSocial.java +++ b/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; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java index 40a5c90..c569ff4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java +++ b/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; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysSocialVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysSocialVo.java index 948dbcc..f87a536 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysSocialVo.java +++ b/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; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java index b6b1188..8c92e40 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java +++ b/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 queryList(SysSocialBo bo) { LambdaQueryWrapper lqw = new LambdaQueryWrapper() .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 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 lqw = new LambdaQueryWrapper() .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 lqw = new LambdaQueryWrapper() - .eq(SysSocial::getAuthId, authId); + .eq(SysSocial::getAuthId, authId) + .eq(SysSocial::getStatus, 0L); SysSocialVo sysSocialVo = baseMapper.selectVoOne(lqw); if(sysSocialVo == null){ return null;