Как я могу вернуть ответ AuthResponse после входа в систему Google OAuth2 в приложении Spring Boot?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу вернуть ответ AuthResponse после входа в систему Google OAuth2 в приложении Spring Boot?

Сообщение Anonymous »

Я использую аутентификацию Google OAuth2 в своем приложении Spring Boot. Я хочу вернуть объект AuthResponse пользователю после успешного входа в систему. В настоящее время я перенаправляю пользователя на определенный URL-адрес после успешного входа в систему, но хочу передать информацию пользователя (например, идентификатор пользователя, имя пользователя, URL-адрес изображения профиля и JWT) без использования перенаправления.
Вот мой текущий код:

Код: Выделить всё

@Component
public class CustomOAuth2SuccessHandler implements AuthenticationSuccessHandler {

private final UserService userService;
private final JwtService jwtService;
private final RefreshTokenService refreshTokenService;

public CustomOAuth2SuccessHandler(UserService userService, JwtService jwtService, RefreshTokenService refreshTokenService) {
this.userService = userService;
this.jwtService = jwtService;
this.refreshTokenService = refreshTokenService;
}

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal();
String email = oAuth2User.getAttribute("email");
String fullName = oAuth2User.getAttribute("name");

if (!userService.existsMail(email) && !userService.checkUser(email)) {
response.sendRedirect("http://localhost:3000/register?email=" + email + "&fullName=" + fullName);
} else {
response.sendRedirect("http://localhost:3000/home");
}
}
}

// Security configuration
http
.oauth2Login(oauth2 -> oauth2
.successHandler(customOAuth2SuccessHandler)
.failureUrl("http://localhost:3000/login")
);

@PostMapping("/login")
public ResponseEntity login(@RequestBody AuthRequest authRequest) {
AuthResponse response = authService.login(authRequest);
return new ResponseEntity(RestResponse.of(response), HttpStatus.OK);
}

public record AuthResponse(
Long userId,
String username,
String profileImageUrl,
String accessToken,
String refreshToken,
String message
) {}
Мои ожидания:
Когда пользователь успешно входит в систему с помощью Google, я хочу получить объект AuthResponse. Как я могу добиться этого, не перенаправляя пользователя на определенный URL-адрес? Как я могу использовать его во время перенаправления вместо возврата ответа AuthResponse в формате JSON?
Спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -boot-appl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»