Passport-github2 возвращает null в поле электронной почты
паспорт-github2 возвращает null в поле электронной почты, даже если
{scope: ['user:email']}
был передан
passport.authenticate('github', {scope: ['user:email'] , session: false})(req, res, next)
1 ответ
Немного посмотрев на исходный код, я обнаружил, что существует функция для получения электронной почты пользователя, но для этого нам нужно передать область, в которой мы инициализируем наш
GitHubStrategy
. Я не уверен, почему это нигде не задокументировано! Чтобы запустить его и заработать, я обнаружил, что нам нужно сделать следующее:
passport.use(new GitHubStrategy({
clientID: GITHUB_OAUTH_CLIENT_ID,
clientSecret: GITHUB_OAUTH_CLIENT_SECRET,
callbackURL: GITHUB_OAUTH_CALLBACK,
proxy: true,
scope: ['user:email'] //This is all it takes to get emails
}, (accessToken, refreshToken, profile, next) => {
// You get the profile object with emails array which can be accessed with
// profile.emails[n].value
}));
//middleware
passport.authenticate('github', {scope: ['user:email'] , session: false})(req, res, next)
Очень странно, что это не задокументировано в их репо.
Примечание. Поскольку для GitHub вы не можете получить адрес электронной почты напрямую, если он настроен пользователем как закрытый, вам необходимо вызвать другую конечную точку (документы). Это написано здесь, внутри исходного кода: (источник)
PS: Я все еще ищу лучший способ доступа к электронной почте, не выходя за рамки двух мест.