Автоматический вход в систему Google OAuth
У меня есть несколько вопросов о процессе OAuth2.0.
Я хотел бы добиться чего-то вроде функции стека Log with google account
.
Я использую библиотеку PHP от Google.
Я в порядке, извлекая маркер обновления и маркер доступа.
Пока все хорошо, мой вопрос таков: когда пользователь выйдет с моего веб-сайта и снова нажмет кнопку, как я должен узнать, кто этот пользователь, чтобы получить из БД правильный токен обновления?
Я подумал о том, чтобы сохранить электронное письмо в файле cookie но StackOverflow, похоже, не делает этого, так как я очистил свои файлы cookie, но стек продолжает подключать меня, когда я нажимаю кнопку, не показывая страницу Google "Авторизация области применения".
Я что-то упускаю? Существует ли API, позволяющий получать электронную почту пользователя без токена? Может быть, refreshToken следует использовать только с мобильным приложением, в котором вы знаете пользователя?
То, чего я хочу достичь, относительно просто: пользователь нажимает кнопку входа, в первый раз нужно утвердить приложение. Как только это будет сделано, я хотел бы автоматически подключить пользователя при нажатии кнопки входа.
Спасибо за любую информацию по этому поводу
4 answers
Https://developers.google.com/accounts/docs/OAuth2Login описывает, как выполнить вход с помощью Google/ OAuth2.
Когда пользователь нажимает кнопку входа в систему в первый раз и вводит данные для входа, OAuth возвращает все данные пользователя, включая электронную почту и идентификатор Google. Таким образом, вы можете хранить идентификатор Google в базе данных вместе с электронной почтой. Также, когда пользователь выходит из системы и снова нажимает кнопку входа, OAuth снова извлекает данные. Таким образом, вы можете проверить идентификатор Google, полученный OAuth, с помощью идентификатора Google, присутствующего в вашей базе данных.
Выберите эту процедуру, если вы предпочитаете просто обновить реализацию входа в систему OAuth 2.0 (OpenID Connect).
Изменить конечную точку: Вы можете заменить конечную точку userinfo на конечную точку people.get, используя следующий путь HTTP-запроса: https://www.googleapis.com/plus/v1/people/me Если вместо этого вам нужен формат OpenID Connect, замените конечную точку userinfo конечной точкой people.getopenidconnect, используя следующий HTTP-запрос путь: https://www.googleapis.com/plus/v1/people/me/openIdConnect Изменить область действия: Если ваше приложение в настоящее время использует https://www.googleapis.com/auth/userinfo.profile область, вы можете переключиться на область профиля. Ваше приложение получает ту же информацию о профиле, что и раньше, поэтому вашим пользователям не потребуется повторно давать согласие.
Перенос способа получения вашим приложением адресов электронной почты: Если вы используете конечную точку userinfo для получения адресов электронной почты пользователей, вы можете перенести способ получения электронной почты вашим приложением адреса.
Https://developers.google.com /+/api/аутентификация-миграция#электронная почта
Что вам нужно сделать, так это настроить постоянный файл cookie с уникальным идентификатором и создать запись в вашей базе данных, которая свяжет этот идентификатор с зарегистрированным пользователем.
Очевидно, что при первом входе пользователя на ваш сайт с помощью OAuth вам необходимо создать запись пользователя в вашей базе данных.
Вам также необходимо перенаправить на нужную конечную точку Google OAuth, чтобы получить токен для автономных пользователей, иначе срок действия токена истечет, и его нельзя будет автоматически обновить после пока.
Я написал статью именно об этом получении токенов Google OAuth для автономного использования и сохраняйте их действительными и возобновляемыми столько, сколько вы хотите. Эта статья посвящена классу, который я написал со всем кодом для этого, включая хранение токенов в базе данных.