Как показать, что пользователь подключен к GitHub
Я занимаюсь разработкой такого веб-сайта, как Heroku. Я не понимал, что мне делать с частью Github OAuth? когда вы хотите зарегистрироваться в Heroku и войти в систему, вы не можете использовать способы OAuth (вход / регистрация с помощью Github).
но после входа в систему вы можете создать приложение. Теперь один из вариантов загрузки кодов в Heroku - подключить учетную запись Heroku к учетной записи Github.
Моя проблема
Когда пользователь вошел в систему, как я могу перенаправить пользователя на другую страницу и после аутентификации (Github OAuth), как я могу определить, что этот пользователь ранее вошел в систему, и пользователю не требуется повторный вход?
Именно то, что сделал Heroku.
Я не могу понять, как я могу отправить другие данные на страницу входа в Github OAuth и получить их обратно в URL-адресе обратного вызова, чтобы определить, какой пользователь сейчас вошел в систему, и сохранить его / ее access_token и refresh_token в базе данных.
Не то чтобы я использую expressjs express-session sequelize и ejs.
1 ответ
GitHub, как и все API на основе OAuth, требует, чтобы каждый запрос к API, сделанный от имени пользователя, аутентифицировался с помощью access_token
. Если вы не пройдетеaccess_token
вместе с вашим запросом запрос не будет выполнен с 401 Unauthorized
код состояния.
Невозможно спросить GitHub, принял ли ваше приложение случайный пользователь. Это не реализовано в структуре OAuth - это может привести к уязвимости безопасности. Таким образом, вы как владелец приложения обязаны записать, какой пользователь авторизовал ваше приложение.
Имея это в виду, давайте попытаемся суммировать различные шаги, которые Heroku должен был выполнить, чтобы отобразить этот статус "Подключен" под логотипом GitHub.
- Когда вы зарегистрировались на Heroku, статус интеграции GitHub был "not_connected". Если вы посетите страницу настроек, вы увидите кнопку "Подключиться к GitHub".
- В какой-то момент на панели управления Heroku вы нажали кнопку "Подключиться к GitHub" и авторизовали приложение Heroku для GitHub. Здесь вы были перенаправлены на
callback_url
- В это время, когда вы были
callback_url
страница Heroku записала в свою базу данных новый статус интеграции GitHub для вашей учетной записи. Было установлено "подключено". Heroku, вероятно, сохранил вместе сaccess_token
а такжеrefresh_token
. - Каждый раз, когда вы посещаете страницу настроек своего приложения, Heroku может отображать, что вы подключены, потому что он имеет статус в своей базе данных.
- (необязательно) Когда Heroku выполняет запросы к GitHub API, используя ваш
access_token
он может подтвердить, что соединение все еще живо. Если когда-либо запрос не удался401 Unauthorized
, Heroku может обновить свою базу данных и сбросить ваш статус интеграции GitHub на "not_connected".
Это работает аналогично GitHub API, а также любым другим API на основе OAuth. Если вы планируете интегрироваться с несколькими API, я настоятельно рекомендую вам использовать диспетчер интеграции API, например Pizzly. Это поможет вам сосредоточиться на бизнес-логике ("подключен мой пользователь или нет?") И полностью обработать процесс OAuth за вас.