У меня есть бэкэнд 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>