Я хочу, чтобы на моем веб-сайте была кнопка входа в систему, чтобы при нажатии на нее пользователь мог использовать свои учетные данные Google. В идеале я бы хотел выполнить аутентификацию на стороне сервера, используя Express.js и Passport.js.
Я реализовал аутентификацию на стороне сервера, но проблема в том, что я не могу сделать запрос AJAX с веб-сайта на сервер, чтобы начать аутентификацию, потому что Google или Oauth не поддерживают CORS . Поэтому мне нужно использовать элемент a href
на моем веб-сайте, который будет вызывать конечную точку аутентификации сервера. Тем не менее, я не могу поймать ответ сервера таким образом.
Если я выполняю аутентификацию на стороне клиента (я использую React), я могу сохранить состояние входа в Redux и разрешить пользователю доступ к ресурсам сайта. Однако, когда пользователь выходит из системы, мне нужно убедиться, что конечные точки сервера перестают обслуживать одного и того же пользователя, что похоже на реализацию аутентификации дважды: на стороне клиента и на стороне сервера.
Кроме того, при аутентификации на стороне клиента Google открывает всплывающее окно для аутентификации пользователя, которое, как мне кажется, хуже для пользователя, чем просто перенаправление при аутентификации на стороне сервера.
Мне интересно, какова лучшая практика с точки зрения аутентификации с использованием Oauth2 / Google. Например, на stackoverflow.com также есть кнопка Google, но она просто выполняет перенаправление без всплывающих окон, поэтому я думаю, что они нашли способ выполнить проверку подлинности на стороне сервера и обойти проблему CORS.