Код: Выделить всё
@GetMapping("/user")
public ResponseEntity user (@AuthenticationPrincipal OAuth2User principal) {
User user = userService.findOrCreateUser (principal);
//...
}
Код: Выделить всё
public User findOrCreateUser (OAuth2User principal) {
String id = principal.getName ();
//...
}
Прежде чем я придумал решение выше, я пытался реализовать «правильный» способ, но в разделе «Как Добавьте базу данных локальных пользователей», руководство довольно расплывчато:
Реализуйте и предоставьте OAuth2UserService для вызова сервера авторизации, а также вашей базы данных. Ваша реализация может делегировать реализацию реализации по умолчанию, которая возьмет на себя тяжелую работу по вызову сервера авторизации. Ваша реализация должна возвращать что-то, расширяющее ваш пользовательский объект User и реализующее OAuth2User.
Я попробовал решение ниже, сохраняя объект OAuth2User с каждым пользователь. Однако при чтении объектов User из MongoDB возникает исключение, поскольку не удается найти подходящий конструктор (хотя конструктор имеет параметры для всех полей класса).
Код: Выделить всё
public class User implements OAuth2User {
private final String id;
private final OAuth2User principal;
Подробнее здесь: https://stackoverflow.com/questions/790 ... ith-oauth2