Spring Boot Starter OAuth2 Client — как сохранить аутентификацию пользователя даже после закрытия браузера [ google oauth2 ]

1
7

У меня есть бэкэнд Spring Boot, который использует spring-boot-starter-oauth2-client для того, чтобы иметь систему входа google oauth2 для моего сайта.

Вот SecurityFilterChain, когда пользователь входит в систему с помощью google, он добавляет пользователя в мою базу данных. Пользователь GoogleOAuth2 — это настраиваемый OAuth2User, который я сделал, чтобы проще предоставлять такие атрибуты, как "email".

Затем у меня есть конечная точка, которую мой аутентифицированный клиент вызывает, чтобы проверить, вошел ли он

На фронтенде у меня есть кнопка, которая ведет на страницу google oauth2.

Однако проблема здесь заключается в том, что клиент аутентифицируется только в текущем сеансе браузера. Когда я закрываю браузер и снова открываю его, клиент снова выходит из системы и не аутентифицируется. Как мне сохранить сеанс, чтобы мой пользователь оставался "вошедшим в систему" ​​даже после закрытия браузера?

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf(csrf -> csrf.disable())

                .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/",  "/oauth/**").permitAll()
                        .anyRequest().authenticated()
                )
                .oauth2Login(oauth2Login -> oauth2Login
                        .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint
                                .userService(googleOAuth2UserService)
                        )
                        .successHandler(new AuthenticationSuccessHandler() {
                            @Override
                            public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
                                throws IOException, ServletException {

                                GoogleOAuth2User googleOAuth2User = (GoogleOAuth2User) authentication.getPrincipal();
                                userService.processOAuthPostLogin(googleOAuth2User);
                                response.sendRedirect("http://localhost:3000");
                            }
                        })
                );

        return http.build();
    }
@GetMapping(path = "/authenticated")
    public User getAuthenticatedUser(@AuthenticationPrincipal GoogleOAuth2User principal) {
        return userService.getAuthenticatedUser(principal);
    }
<div>
        With Google: <a href="http://localhost:8080/oauth2/authorization/google">click here</a>
      </div>
Александр
Вопрос задан25 июня 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.