@ -88,8 +88,16 @@ public class XcxAuthStrategy implements IAuthStrategy {
String username = authUser . getUsername ( ) ;
authUser . setSource ( loginBody . getSource ( ) ) ;
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
if ( StringUtils . isNotEmpty ( loginBody . getPhoneCode ( ) ) ) {
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 ( ) ) ) {
//注册用户
username = SocialUtils
. loginXcxAuthPhone ( loginBody . getSource ( ) , loginBody . getPhoneCode ( ) , socialProperties ) ;
authUser . setUsername ( username ) ;
@ -97,46 +105,42 @@ public class XcxAuthStrategy implements IAuthStrategy {
RegisterBody registerBody = new RegisterBody ( ) ;
registerBody . setUsername ( username ) ;
registerBody . setTenantId ( loginBody . getTenantId ( ) ) ;
if ( StringUtils . isEmpty ( loginBody . getUserType ( ) ) ) {
loginBody . setUserType ( UserType . APP_USER . getUserType ( ) ) ;
}
registerBody . setUserType ( loginBody . getUserType ( ) ) ;
SysUserVo sysUserVo = loadUserByUsername ( username ) ;
SysUserVo user = new SysUserVo ( ) ;
user = new SysUserVo ( ) ;
if ( sysUserVo = = null ) {
//手机号注册账号
SysUserBo register = register ( registerBody ) ;
BeanUtil . copyProperties ( register , user ) ;
} else {
sysUserVo . setUserType ( loginBody . getUserType ( ) ) ;
BeanUtil . copyProperties ( sysUserVo , user ) ;
}
//注册 第三方
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 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
@ -170,8 +174,8 @@ 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 ) ) ;
@ -190,6 +194,8 @@ 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 ;
@ -208,14 +214,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 . setUserName ( authUserData . getUsername ( ) ) ;
params . setOpenId ( authUserData . getUuid ( ) ) ;
params . setUserId ( userId ) ;
params . setSource ( bo . getSource ( ) ) ;
bo . setStatus ( 0L ) ;
List < SysSocialVo > list = sysSocialService . queryList ( params ) ;
if ( CollUtil . isEmpty ( list ) ) {
// 没有绑定用户, 新增用户信息