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: Я все еще ищу лучший способ доступа к электронной почте, не выходя за рамки двух мест.

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