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(); String username = authUser.getUsername();
authUser.setSource(loginBody.getSource()); authUser.setSource(loginBody.getSource());
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
SysUserVo user = loadUserByOpenid(loginBody.getSource()+openid); if( StringUtils.isNotEmpty(loginBody.getPhoneCode())){
//未找到用户信息 注册
if (user == null && StringUtils.isEmpty(loginBody.getPhoneCode())) {
LoginVo loginVo = new LoginVo();
loginVo.setBindingFlag(false);
return loginVo;
}
else if(user == null && StringUtils.isNotEmpty(loginBody.getPhoneCode())){
//注册用户 //注册用户
username = SocialUtils username = SocialUtils
.loginXcxAuthPhone(loginBody.getSource(), loginBody.getPhoneCode(), socialProperties); .loginXcxAuthPhone(loginBody.getSource(), loginBody.getPhoneCode(), socialProperties);
authUser.setUsername(username); authUser.setUsername(username);
@ -106,7 +98,7 @@ public class XcxAuthStrategy implements IAuthStrategy {
registerBody.setUsername(username); registerBody.setUsername(username);
registerBody.setTenantId(loginBody.getTenantId()); registerBody.setTenantId(loginBody.getTenantId());
SysUserVo sysUserVo = loadUserByUsername(username); SysUserVo sysUserVo = loadUserByUsername(username);
user = new SysUserVo(); SysUserVo user = new SysUserVo();
if(sysUserVo == null){ if(sysUserVo == null){
//手机号注册账号 //手机号注册账号
SysUserBo register = register(registerBody); SysUserBo register = register(registerBody);
@ -116,31 +108,30 @@ public class XcxAuthStrategy implements IAuthStrategy {
} }
//注册 第三方 //注册 第三方
socialRegister(authUser, user.getUserId()); 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) { private SysUserVo loadUserByOpenid(String authId) {
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户 // 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
@ -175,7 +166,6 @@ public class XcxAuthStrategy implements IAuthStrategy {
String password = sysConfigService.selectConfigByKey("sys.user.initPassword"); String password = sysConfigService.selectConfigByKey("sys.user.initPassword");
// app用户 // app用户
String userType = UserType.APP_USER.getUserType(); String userType = UserType.APP_USER.getUserType();
SysUserBo sysUser = new SysUserBo(); SysUserBo sysUser = new SysUserBo();
sysUser.setUserName(username); sysUser.setUserName(username);
sysUser.setNickName("微信用户:"+ username.substring(7)); sysUser.setNickName("微信用户:"+ username.substring(7));
@ -194,8 +184,6 @@ public class XcxAuthStrategy implements IAuthStrategy {
long postId = Long.parseLong(appPostId); long postId = Long.parseLong(appPostId);
sysUser.setPostIds(new Long[]{postId}); sysUser.setPostIds(new Long[]{postId});
sysUserService.registerUser(sysUser, "000000"); sysUserService.registerUser(sysUser, "000000");
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success")); recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
return sysUser; return sysUser;
@ -214,14 +202,14 @@ public class XcxAuthStrategy implements IAuthStrategy {
bo.setUnionId(authUserData.getToken().getUnionId()); bo.setUnionId(authUserData.getToken().getUnionId());
bo.setUserName(authUserData.getUsername()); bo.setUserName(authUserData.getUsername());
bo.setNickName(authUserData.getNickname()); bo.setNickName(authUserData.getNickname());
List<SysSocialVo> checkList = sysSocialService.selectByAuthId(authId);
if (CollUtil.isNotEmpty(checkList)) {
throw new ServiceException("此三方账号已经被绑定!");
}
// 查询是否已经绑定用户 // 查询是否已经绑定用户
SysSocialBo params = new SysSocialBo(); SysSocialBo params = new SysSocialBo();
params.setUserId(userId); //params.setUserId(userId);
params.setUserName(authUserData.getUsername());
params.setOpenId(authUserData.getUuid());
params.setSource(bo.getSource()); params.setSource(bo.getSource());
bo.setStatus(0L);
List<SysSocialVo> list = sysSocialService.queryList(params); List<SysSocialVo> list = sysSocialService.queryList(params);
if (CollUtil.isEmpty(list)) { 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; 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; 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; 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 cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
@ -46,6 +47,7 @@ public class SysSocialServiceImpl implements ISysSocialService {
public List<SysSocialVo> queryList(SysSocialBo bo) { public List<SysSocialVo> queryList(SysSocialBo bo) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>() LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
.eq(ObjectUtil.isNotNull(bo.getUserId()), SysSocial::getUserId, bo.getUserId()) .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.getAuthId()), SysSocial::getAuthId, bo.getAuthId())
.eq(StringUtils.isNotBlank(bo.getSource()), SysSocial::getSource, bo.getSource()); .eq(StringUtils.isNotBlank(bo.getSource()), SysSocial::getSource, bo.getSource());
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
@ -90,6 +92,11 @@ public class SysSocialServiceImpl implements ISysSocialService {
*/ */
private void validEntityBeforeSave(SysSocial entity) { private void validEntityBeforeSave(SysSocial entity) {
//TODO 做一些数据校验,如唯一约束 //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) { public SysSocialVo selectByUserIdAndSource(Long userId, String source) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>() LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
.eq(SysSocial::getUserId, userId) .eq(SysSocial::getUserId, userId)
.eq(SysSocial::getSource, source); .eq(SysSocial::getSource, source)
.eq(SysSocial::getStatus, 0L);
return baseMapper.selectVoOne(lqw); return baseMapper.selectVoOne(lqw);
} }
@ -137,7 +145,8 @@ public class SysSocialServiceImpl implements ISysSocialService {
@Override @Override
public SysUserVo queryByAuthId(String authId) { public SysUserVo queryByAuthId(String authId) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>() LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
.eq(SysSocial::getAuthId, authId); .eq(SysSocial::getAuthId, authId)
.eq(SysSocial::getStatus, 0L);
SysSocialVo sysSocialVo = baseMapper.selectVoOne(lqw); SysSocialVo sysSocialVo = baseMapper.selectVoOne(lqw);
if(sysSocialVo == null){ if(sysSocialVo == null){
return null; return null;

Loading…
Cancel
Save