diff --git a/pom.xml b/pom.xml
index 8dc576f54..cc82b1772 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,10 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.slf4j
+ slf4j-api
+
org.springframework.boot
spring-boot-starter-data-jpa
diff --git a/src/main/java/com/openisle/service/TwitterAuthService.java b/src/main/java/com/openisle/service/TwitterAuthService.java
index 6caa5065f..52bdc0825 100644
--- a/src/main/java/com/openisle/service/TwitterAuthService.java
+++ b/src/main/java/com/openisle/service/TwitterAuthService.java
@@ -13,6 +13,8 @@ import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import org.springframework.util.MultiValueMap;
import org.springframework.util.LinkedMultiValueMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.*;
@@ -21,6 +23,7 @@ import java.util.*;
public class TwitterAuthService {
private final UserRepository userRepository;
private final RestTemplate restTemplate = new RestTemplate();
+ private static final Logger logger = LoggerFactory.getLogger(TwitterAuthService.class);
@Value("${twitter.client-id:}")
private String clientId;
@@ -31,6 +34,8 @@ public class TwitterAuthService {
RegisterMode mode,
String redirectUri) {
+ logger.debug("Starting authentication with code {} and verifier {}", code, codeVerifier);
+
// 1. 交换 token
String tokenUrl = "https://api.twitter.com/2/oauth2/token";
HttpHeaders headers = new HttpHeaders();
@@ -49,8 +54,11 @@ public class TwitterAuthService {
ResponseEntity tokenRes;
try {
+ logger.debug("Requesting token from {}", tokenUrl);
tokenRes = restTemplate.postForEntity(tokenUrl, new HttpEntity<>(body, headers), JsonNode.class);
+ logger.debug("Token response: {}", tokenRes.getBody());
} catch (HttpClientErrorException e) {
+ logger.debug("Token request failed", e);
return Optional.empty();
}
@@ -65,12 +73,15 @@ public class TwitterAuthService {
authHeaders.setBearerAuth(accessToken);
ResponseEntity userRes;
try {
+ logger.debug("Fetching user info with access token");
userRes = restTemplate.exchange(
"https://api.twitter.com/2/users/me",
HttpMethod.GET,
new HttpEntity<>(authHeaders),
JsonNode.class);
+ logger.debug("User info response: {}", userRes.getBody());
} catch (HttpClientErrorException e) {
+ logger.debug("User info request failed", e);
return Optional.empty();
}
@@ -82,6 +93,7 @@ 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));
}
@@ -94,6 +106,7 @@ public class TwitterAuthService {
user.setVerificationCode(null);
userRepository.save(user);
}
+ logger.debug("Existing user {} authenticated", user.getUsername());
return user;
}
String baseUsername = username != null ? username : email.split("@")[0];
@@ -110,6 +123,7 @@ public class TwitterAuthService {
user.setVerified(true);
user.setApproved(mode == com.openisle.model.RegisterMode.DIRECT);
user.setAvatar("https://twitter.com/" + finalUsername + "/profile_image");
+ logger.debug("Creating new user {}", finalUsername);
return userRepository.save(user);
}
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 686c0ec3a..86ba7d438 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,4 +1,5 @@
# for mysql
+logging.level.root=${LOG_LEVEL:INFO}
spring.datasource.url=${MYSQL_URL:jdbc:mysql://localhost:3306/openisle}
spring.datasource.username=${MYSQL_USER:root}
spring.datasource.password=${MYSQL_PASSWORD:password}