Как обрабатывать аутентификацию Github в nodejs для пользователей с нулевой электронной почтой?

#node.js #mongodb #github-api

Вопрос:

У меня есть обычный поток аутентификации, в котором пользователь регистрируется с паролем и электронной почтой и хотел бы добавить аутентификацию на Github, но я заметил, что поле электронной почты может оказаться пустым, если пользователь не добавит его в свой профиль. Я хотел бы знать, как лучше всего сохранить пользователей, зарегистрированных на Github, в бэкэнде

Ответ №1:

В документации Github по OAuth не указан параметр области, который вы можете указать при получении пользовательского кода. Кроме того, вы не можете получить его через /user конечную точку, вам нужно сделать дополнительный запрос на user/emails

  1. Чтобы получить «Код», сначала перенаправьте пользователя на https://github.com/login/oauth/authorize?client_id={CLIENTID}amp;redirect_uri={REDIRECT_URL}amp;scope=read:user,user:email
  2. Затем, чтобы получить маркер доступа, отправьте запрос POST с полученным «Кодом», например: https://github.com/login/oauth/access_token?client_id={clientID}amp;client_secret={clientSecret}amp;code={code}
  3. Теперь, когда вы получаете маркер доступа, сначала сделайте запрос к /user конечной точке, а затем сделайте запрос к /user/emails конечной точке. Убедитесь, что вы передали маркер доступа в заголовке с параметром Authorization: "token {accessToken}"

Чтобы получить основные данные пользователя, отправьте запрос GET по этому URL — адресу: https://api.github.com/user

А затем, чтобы получить электронные письма пользователей, сделайте запрос GET на https://api.github.com/user/emails

В результате вы можете получить несколько электронных писем. Результат будет выглядеть примерно так:

 [
  {
    email: 'johndoe100@gmail.com',
    primary: true,
    verified: true,
    visibility: 'public'
  },
  {
    email: 'johndoe111@domain.com',
    primary: false,
    verified: true,
    visibility: null
  }
]
 

Вы можете выбрать тот, для которого установлен primary параметр true .