#node.js #mongodb #github-api
Вопрос:
У меня есть обычный поток аутентификации, в котором пользователь регистрируется с паролем и электронной почтой и хотел бы добавить аутентификацию на Github, но я заметил, что поле электронной почты может оказаться пустым, если пользователь не добавит его в свой профиль. Я хотел бы знать, как лучше всего сохранить пользователей, зарегистрированных на Github, в бэкэнде
Ответ №1:
В документации Github по OAuth не указан параметр области, который вы можете указать при получении пользовательского кода. Кроме того, вы не можете получить его через /user
конечную точку, вам нужно сделать дополнительный запрос на user/emails
- Чтобы получить «Код», сначала перенаправьте пользователя на
https://github.com/login/oauth/authorize?client_id={CLIENTID}amp;redirect_uri={REDIRECT_URL}amp;scope=read:user,user:email
- Затем, чтобы получить маркер доступа, отправьте запрос POST с полученным «Кодом», например:
https://github.com/login/oauth/access_token?client_id={clientID}amp;client_secret={clientSecret}amp;code={code}
- Теперь, когда вы получаете маркер доступа, сначала сделайте запрос к
/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
.