From a4faa2c25a1cd119820c8c447ca095414eeef642 Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Wed, 16 Jul 2025 20:50:40 +0800 Subject: [PATCH] use platform avatar for oauth registration --- .../com/openisle/service/GithubAuthService.java | 11 ++++++++--- .../com/openisle/service/GoogleAuthService.java | 11 ++++++++--- .../com/openisle/service/TwitterAuthService.java | 13 +++++++++---- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/openisle/service/GithubAuthService.java b/src/main/java/com/openisle/service/GithubAuthService.java index b269d877a..52e010c3c 100644 --- a/src/main/java/com/openisle/service/GithubAuthService.java +++ b/src/main/java/com/openisle/service/GithubAuthService.java @@ -60,6 +60,7 @@ public class GithubAuthService { } JsonNode userNode = userRes.getBody(); String username = userNode.hasNonNull("login") ? userNode.get("login").asText() : null; + String avatarUrl = userNode.hasNonNull("avatar_url") ? userNode.get("avatar_url").asText() : null; String email = null; if (userNode.hasNonNull("email")) { email = userNode.get("email").asText(); @@ -83,13 +84,13 @@ public class GithubAuthService { if (email == null) { email = username + "@users.noreply.github.com"; } - return Optional.of(processUser(email, username, mode)); + return Optional.of(processUser(email, username, avatarUrl, mode)); } catch (Exception e) { return Optional.empty(); } } - private User processUser(String email, String username, com.openisle.model.RegisterMode mode) { + private User processUser(String email, String username, String avatar, com.openisle.model.RegisterMode mode) { Optional existing = userRepository.findByEmail(email); if (existing.isPresent()) { User user = existing.get(); @@ -113,7 +114,11 @@ public class GithubAuthService { user.setRole(Role.USER); user.setVerified(true); user.setApproved(mode == com.openisle.model.RegisterMode.DIRECT); - user.setAvatar("https://github.com/" + finalUsername + ".png"); + if (avatar != null) { + user.setAvatar(avatar); + } else { + user.setAvatar("https://github.com/" + finalUsername + ".png"); + } return userRepository.save(user); } } diff --git a/src/main/java/com/openisle/service/GoogleAuthService.java b/src/main/java/com/openisle/service/GoogleAuthService.java index 77b010a5d..56b0778ec 100644 --- a/src/main/java/com/openisle/service/GoogleAuthService.java +++ b/src/main/java/com/openisle/service/GoogleAuthService.java @@ -35,13 +35,14 @@ public class GoogleAuthService { GoogleIdToken.Payload payload = idToken.getPayload(); String email = payload.getEmail(); String name = (String) payload.get("name"); - return Optional.of(processUser(email, name, mode)); + String picture = (String) payload.get("picture"); + return Optional.of(processUser(email, name, picture, mode)); } catch (Exception e) { return Optional.empty(); } } - private User processUser(String email, String name, com.openisle.model.RegisterMode mode) { + private User processUser(String email, String name, String avatar, com.openisle.model.RegisterMode mode) { Optional existing = userRepository.findByEmail(email); if (existing.isPresent()) { User user = existing.get(); @@ -66,7 +67,11 @@ public class GoogleAuthService { user.setRole(Role.USER); user.setVerified(true); user.setApproved(mode == com.openisle.model.RegisterMode.DIRECT); - user.setAvatar("https://github.com/identicons/" + username + ".png"); + if (avatar != null) { + user.setAvatar(avatar); + } else { + user.setAvatar("https://github.com/identicons/" + username + ".png"); + } return userRepository.save(user); } } diff --git a/src/main/java/com/openisle/service/TwitterAuthService.java b/src/main/java/com/openisle/service/TwitterAuthService.java index fa2f48f62..eb65d0ccf 100644 --- a/src/main/java/com/openisle/service/TwitterAuthService.java +++ b/src/main/java/com/openisle/service/TwitterAuthService.java @@ -86,7 +86,7 @@ public class TwitterAuthService { try { logger.debug("Fetching user info with access token"); userRes = restTemplate.exchange( - "https://api.twitter.com/2/users/me", + "https://api.twitter.com/2/users/me?user.fields=profile_image_url", HttpMethod.GET, new HttpEntity<>(authHeaders), JsonNode.class); @@ -98,6 +98,7 @@ public class TwitterAuthService { JsonNode data = userRes.getBody() == null ? null : userRes.getBody().path("data"); String username = data != null ? data.path("username").asText(null) : null; + String avatar = data != null ? data.path("profile_image_url").asText(null) : null; if (username == null) { return Optional.empty(); } @@ -105,10 +106,10 @@ public class TwitterAuthService { // Twitter v2 默认拿不到 email;如果你申请到 email.scope,可改用 /2/users/:id?user.fields=email String email = username + "@twitter.com"; logger.debug("Processing user {} with email {}", username, email); - return Optional.of(processUser(email, username, mode)); + return Optional.of(processUser(email, username, avatar, mode)); } - private User processUser(String email, String username, com.openisle.model.RegisterMode mode) { + private User processUser(String email, String username, String avatar, com.openisle.model.RegisterMode mode) { Optional existing = userRepository.findByEmail(email); if (existing.isPresent()) { User user = existing.get(); @@ -133,7 +134,11 @@ public class TwitterAuthService { user.setRole(Role.USER); user.setVerified(true); user.setApproved(mode == com.openisle.model.RegisterMode.DIRECT); - user.setAvatar("https://twitter.com/" + finalUsername + "/profile_image"); + if (avatar != null) { + user.setAvatar(avatar); + } else { + user.setAvatar("https://twitter.com/" + finalUsername + "/profile_image"); + } logger.debug("Creating new user {}", finalUsername); return userRepository.save(user); }