ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
@@ -25,7 +25,6 @@ import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISocialUserService; import org.dromara.system.service.ISysConfigService; import org.dromara.system.service.ISysTenantService; @@ -139,14 +138,6 @@ @GetMapping("/binding/{source}") @ResponseBody public R<LoginVo> authBinding(@PathVariable("source") String source, HttpServletRequest request){ SysUserVo userLoding = new SysUserVo(); if (ObjectUtil.isNull(userLoding)) { return R.fail("ææå¤±è´¥ï¼è¯·å ç»å½åç»å®"); } if (socialUserService.isExistByUserIdAndSource(userLoding.getUserId(),source)) { return R.fail(source + "å¹³å°è´¦å·å·²ç»è¢«è´¦å·ç»å®"); } SocialLoginConfigProperties obj = socialProperties.getType().get(source); if (ObjectUtil.isNull(obj)){ return R.fail(source + "å¹³å°è´¦å·æä¸æ¯æ"); @@ -191,9 +182,6 @@ Boolean rows = socialUserService.deleteWithValidById(socialId); return rows ? R.ok() : R.fail("åæ¶ææå¤±è´¥"); } /** ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -34,11 +34,9 @@ import org.dromara.common.web.config.properties.CaptchaProperties; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SocialUserBo; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SocialUserVo; import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.SocialUserMapper; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.ISocialUserService; import org.dromara.system.service.ISysPermissionService; @@ -66,7 +64,6 @@ private final SysUserMapper userMapper; private final ISocialUserService socialUserService; private final ISysUserService userService; private final CaptchaProperties captchaProperties; private final ISysPermissionService permissionService; private final ISysTenantService tenantService; @@ -176,22 +173,20 @@ * @param request Http请æ±å¯¹è±¡ * @return ç»ä¸ååºå®ä½ */ public R<String> socialLogin(String source, AuthResponse<AuthUser> authUser, HttpServletRequest request) throws IOException { public R<String> socialLogin(String source, AuthResponse<AuthUser> authUser, HttpServletRequest request) { // 夿ææååºæ¯å¦æå if (!authUser.ok()) { return R.fail("对ä¸èµ·ï¼ææä¿¡æ¯éªè¯ä¸éè¿ï¼è¯·éåºéè¯ï¼"); } AuthUser authUserData = authUser.getData(); String authId = source + authUserData.getUuid(); SocialUserVo user = socialUserService.selectSocialUserByAuthId(authId); SocialUserVo user = socialUserService.selectSocialUserByAuthId(authUserData.getSource() + authUserData.getUuid()); if (ObjectUtil.isNotNull(user)) { //æ§è¡ç»å½åè®°å½ç»å½ä¿¡æ¯æä½ return loginAndRecord(user.getTenantId(), user.getUserName(), authUserData); } else { // 夿æ¯å¦å·²ç»å½ if (LoginHelper.getUserId() == null) { return R.fail("ææå¤±è´¥ï¼è¯·å ç»å½åç»å®"); return R.fail("ææå¤±è´¥ï¼è¯·å ç»å½æè½ç»å®"); } SocialUserBo socialUserBo = new SocialUserBo(); socialUserBo.setUserId(LoginHelper.getUserId()); @@ -201,7 +196,6 @@ socialUserBo.setNickName(authUserData.getNickname()); socialUserBo.setAvatar(authUserData.getAvatar()); socialUserBo.setOpenId(authUserData.getUuid()); BeanUtils.copyProperties(authUserData, socialUserBo); BeanUtils.copyProperties(authUserData.getToken(), socialUserBo); socialUserService.insertByBo(socialUserBo); ruoyi-admin/src/main/resources/application-dev.yml
@@ -184,3 +184,152 @@ sdkAppId: appid #å°åä¿¡æ¯é»è®¤ä¸º ap-guangzhou 妿 ç¹æ®æ¹åå¯ä¸ç¨è®¾ç½® territory: ap-guangzhou justauth: enabled: true type: QQ: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/qq/callback union-id: false WEIBO: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/weibo/callback gitee: client-id: 38eaaa1b77b5e064313057a2f5745ce3a9f3e7686d9bd302c7df2f308ef6db81 client-secret: 2e633af8780cb9fe002c4c7291b722db944402e271efb99b062811f52d7da1ff redirect-uri: http://localhost:80/social-login?source=gitee DINGTALK: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/dingtalk/callback BAIDU: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/baidu/callback CSDN: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/csdn/callback CODING: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/coding/callback coding-group-name: xx OSCHINA: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/oschina/callback ALIPAY: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/alipay/callback alipay-public-key: MIIB**************DAQAB WECHAT_OPEN: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_open/callback WECHAT_MP: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_mp/callback WECHAT_ENTERPRISE: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_enterprise/callback agent-id: 1000002 TAOBAO: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/taobao/callback GOOGLE: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/google/callback FACEBOOK: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/facebook/callback DOUYIN: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/douyin/callback LINKEDIN: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/linkedin/callback MICROSOFT: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/microsoft/callback MI: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/mi/callback TOUTIAO: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/toutiao/callback TEAMBITION: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/teambition/callback RENREN: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/renren/callback PINTEREST: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/pinterest/callback STACK_OVERFLOW: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/stack_overflow/callback stack-overflow-key: asd*********asd HUAWEI: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/huawei/callback KUJIALE: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/kujiale/callback GITLAB: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/gitlab/callback MEITUAN: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/meituan/callback ELEME: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/eleme/callback TWITTER: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/twitter/callback XMLY: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/xmly/callback # 设å¤å¯ä¸æ è¯ID device-id: xxxxxxxxxxxxxx # 客æ·ç«¯æä½ç³»ç»ç±»åï¼1-iOSç³»ç»ï¼2-Androidç³»ç»ï¼3-Web client-os-type: 3 # 客æ·ç«¯å åï¼å¦æ clientOsType 为1æ2æ¶å¿ å¡«ã对Android客æ·ç«¯æ¯å åï¼å¯¹IOS客æ·ç«¯æ¯Bundle ID #pack-id: xxxx FEISHU: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/feishu/callback JD: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: http://oauth.xkcoding.com/demo/oauth/jd/callback ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SocialUserController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package org.dromara.system.controller.system; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.web.core.BaseController; import org.dromara.system.domain.vo.SocialUserVo; import org.dromara.system.service.ISocialUserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 社ä¼åå ³ç³» * * @author thiszhc * @date 2023-06-16 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/system/social") public class SocialUserController extends BaseController { private final ISocialUserService socialUserService; /** * æ¥è¯¢ç¤¾ä¼åå ³ç³»å表 */ // è¿éæ¹æç¨æ·é»è®¤çãåªè½æ¥çèªå·±çæéæ´å¥½å¦ // @SaCheckPermission("system:user:list") @GetMapping("/list") public R<List<SocialUserVo>> list() { return R.ok(socialUserService.queryList()); } /** * è·å社ä¼åå ³ç³»è¯¦ç»ä¿¡æ¯ * * @param id ä¸»é® */ // è¿éæ¹æç¨æ·é»è®¤çãåªè½æ¥çèªå·±çæéæ´å¥½å¦ // @SaCheckPermission("system:user:query") @GetMapping("/{id}") public R<SocialUserVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") @PathVariable String id) { return R.ok(socialUserService.queryById(id)); } } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISocialUserService.java
@@ -1,14 +1,8 @@ package org.dromara.system.service; import org.dromara.system.domain.SocialUser; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SocialUserVo; import org.dromara.system.domain.bo.SocialUserBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SocialUserVo; import java.util.Collection; import java.util.List; /** @@ -18,6 +12,17 @@ * @date 2023-06-12 */ public interface ISocialUserService { /** * æ¥è¯¢ç¤¾ä¼åå ³ç³» */ SocialUserVo queryById(String id); /** * æ¥è¯¢ç¤¾ä¼åå ³ç³»å表 */ List<SocialUserVo> queryList(); /** * æ°å¢ææå ³ç³» @@ -29,12 +34,6 @@ * å é¤ç¤¾ä¼åå ³ç³»ä¿¡æ¯ */ Boolean deleteWithValidById(Long id); /** * æ ¹æ®ç¨æ·IDæ¥è¯¢ææå ³ç³» */ Boolean isExistByUserIdAndSource(Long userId, String source); /** ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SocialUserServiceImpl.java
@@ -1,25 +1,15 @@ package org.dromara.system.service.impl; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserVo; import org.springframework.stereotype.Service; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.system.domain.SocialUser; import org.dromara.system.domain.bo.SocialUserBo; import org.dromara.system.domain.vo.SocialUserVo; import org.dromara.system.domain.SocialUser; import org.dromara.system.mapper.SocialUserMapper; import org.dromara.system.service.ISocialUserService; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Collection; /** * 社ä¼åå ³ç³»Serviceä¸å¡å±å¤ç @@ -33,6 +23,25 @@ private final SocialUserMapper baseMapper; /** * æ¥è¯¢ç¤¾ä¼åå ³ç³» */ @Override public SocialUserVo queryById(String id){ return baseMapper.selectVoById(id); } /** * ææå表 */ @Override public List<SocialUserVo> queryList() { return baseMapper.selectVoList(); } /** * æ°å¢ç¤¾ä¼åå ³ç³» */ @@ -42,7 +51,11 @@ validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); if (add != null) { bo.setId(add.getId()); }else { return false; } } return flag; } @@ -64,20 +77,6 @@ return baseMapper.deleteById(id) > 0; } /** * æ ¹æ®ç¨æ·idåæ¥æºæ¥è¯¢ç¨æ·æ¯å¦åå¨ * * @param userId ç¨æ·id * @param source æ¥æº * @return æ¯å¦åå¨ */ @Override public Boolean isExistByUserIdAndSource(Long userId, String source) { LambdaQueryWrapper<SocialUser> lqw = Wrappers.lambdaQuery(); lqw.eq(SocialUser::getUserId, userId); lqw.eq(SocialUser::getSource, source); return baseMapper.selectCount(lqw) > 0; } /** * æ ¹æ®authIdæ¥è¯¢ç¨æ·ä¿¡æ¯