这种错误通常是由于在passport-github2配置中未正确设置scopes选项而导致的。scopes选项确定在与GitHub API进行交互时哪些权限得到了授权。确保在scopes中包括'user:email”。以下是演示如何在Node.js应用程序中使用passport-github2来获得用户电子邮件的示例代码:
const passport = require('passport');
const GitHubStrategy = require('passport-github2').Strategy;
const axios = require('axios');
const dotenv = require('dotenv');
dotenv.config();
passport.use(new GitHubStrategy({
clientID: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
callbackURL: '/auth/github/callback',
scope: ['user', 'user:email']
},
function(accessToken, refreshToken, profile, done) {
// Retrieve user's email(s) from GitHub API
axios.get(`https://api.github.com/user/emails?access_token=${accessToken}`)
.then(res => {
const primaryEmail = res.data.find(email => email.primary === true);
const userEmails = res.data.map(email => email.email);
const userData = {
accessToken,
name: profile.displayName,
primaryEmail: primaryEmail.email,
userEmails
};
return done(null, userData);
})
.catch(err => {
console.error(err);
return done(err, null);
});
}
));
在上面的示例中,我们'user”范围传递给passport-github2配置,并添加了'user:email”范围,以访问GitHub API中的用户电子邮件。然后,在passport-github2策略的回调中,我们使用axios来获取用户的电子邮件数据。最后,我们将user对象返回给passport来完成用户的身份验证。