fix: 修复 JustAuth 部分三方用户授权登录问题 (#148)

This commit is contained in:
Top2Hub
2025-04-10 15:37:05 +08:00
committed by GitHub
parent 449478b188
commit e2bac69de5
2 changed files with 26 additions and 6 deletions

View File

@@ -24,8 +24,12 @@ import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.ReUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.xkcoding.justauth.AuthRequestFactory; import com.xkcoding.justauth.AuthRequestFactory;
import com.xkcoding.justauth.autoconfigure.JustAuthProperties;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhyd.oauth.AuthRequestBuilder;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUser;
@@ -56,6 +60,7 @@ import top.continew.starter.messaging.websocket.util.WebSocketUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 第三方账号登录处理器 * 第三方账号登录处理器
@@ -68,7 +73,7 @@ import java.util.List;
@RequiredArgsConstructor @RequiredArgsConstructor
public class SocialLoginHandler extends AbstractLoginHandler<SocialLoginReq> { public class SocialLoginHandler extends AbstractLoginHandler<SocialLoginReq> {
private final AuthRequestFactory authRequestFactory; private final JustAuthProperties authProperties;
private final UserSocialService userSocialService; private final UserSocialService userSocialService;
private final UserRoleService userRoleService; private final UserRoleService userRoleService;
private final MessageService messageService; private final MessageService messageService;
@@ -103,7 +108,9 @@ public class SocialLoginHandler extends AbstractLoginHandler<SocialLoginReq> {
user = new UserDO(); user = new UserDO();
user.setUsername(username); user.setUsername(username);
user.setNickname(nickname); user.setNickname(nickname);
user.setGender(GenderEnum.valueOf(authUser.getGender().name())); if(Objects.nonNull(authUser.getGender())) {
user.setGender(GenderEnum.valueOf(authUser.getGender().name()));
}
user.setAvatar(authUser.getAvatar()); user.setAvatar(authUser.getAvatar());
user.setDeptId(SysConstants.SUPER_DEPT_ID); user.setDeptId(SysConstants.SUPER_DEPT_ID);
user.setStatus(DisEnableStatusEnum.ENABLE); user.setStatus(DisEnableStatusEnum.ENABLE);
@@ -149,7 +156,12 @@ public class SocialLoginHandler extends AbstractLoginHandler<SocialLoginReq> {
*/ */
private AuthRequest getAuthRequest(String source) { private AuthRequest getAuthRequest(String source) {
try { try {
return authRequestFactory.get(source); AuthConfig authConfig = authProperties.getType().get(source.toUpperCase());
return AuthRequestBuilder
.builder()
.source(source)
.authConfig(authConfig)
.build();
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestException("暂不支持 [%s] 平台账号登录".formatted(source)); throw new BadRequestException("暂不支持 [%s] 平台账号登录".formatted(source));
} }

View File

@@ -19,13 +19,16 @@ package top.continew.admin.controller.auth;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.xkcoding.justauth.AuthRequestFactory; import com.xkcoding.justauth.autoconfigure.JustAuthProperties;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhyd.oauth.AuthRequestBuilder;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.request.AuthRequest; import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils; import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -61,7 +64,7 @@ public class AuthController {
private final AuthService authService; private final AuthService authService;
private final UserService userService; private final UserService userService;
private final AuthRequestFactory authRequestFactory; private final JustAuthProperties authProperties;
@SaIgnore @SaIgnore
@Operation(summary = "登录", description = "用户登录") @Operation(summary = "登录", description = "用户登录")
@@ -112,7 +115,12 @@ public class AuthController {
private AuthRequest getAuthRequest(String source) { private AuthRequest getAuthRequest(String source) {
try { try {
return authRequestFactory.get(source); AuthConfig authConfig = authProperties.getType().get(source.toUpperCase());
return AuthRequestBuilder
.builder()
.source(source)
.authConfig(authConfig)
.build();
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestException("暂不支持 [%s] 平台账号登录".formatted(source)); throw new BadRequestException("暂不支持 [%s] 平台账号登录".formatted(source));
} }