Как показать, что пользователь подключен к 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.

  1. Когда вы зарегистрировались на Heroku, статус интеграции GitHub был "not_connected". Если вы посетите страницу настроек, вы увидите кнопку "Подключиться к GitHub".
  2. В какой-то момент на панели управления Heroku вы нажали кнопку "Подключиться к GitHub" и авторизовали приложение Heroku для GitHub. Здесь вы были перенаправлены наcallback_url
  3. В это время, когда вы были callback_urlстраница Heroku записала в свою базу данных новый статус интеграции GitHub для вашей учетной записи. Было установлено "подключено". Heroku, вероятно, сохранил вместе сaccess_token а также refresh_token.
  4. Каждый раз, когда вы посещаете страницу настроек своего приложения, Heroku может отображать, что вы подключены, потому что он имеет статус в своей базе данных.
  5. (необязательно) Когда Heroku выполняет запросы к GitHub API, используя вашaccess_tokenон может подтвердить, что соединение все еще живо. Если когда-либо запрос не удался401 Unauthorized, Heroku может обновить свою базу данных и сбросить ваш статус интеграции GitHub на "not_connected".

Это работает аналогично GitHub API, а также любым другим API на основе OAuth. Если вы планируете интегрироваться с несколькими API, я настоятельно рекомендую вам использовать диспетчер интеграции API, например Pizzly. Это поможет вам сосредоточиться на бизнес-логике ("подключен мой пользователь или нет?") И полностью обработать процесс OAuth за вас.

Другие вопросы по тегам