如何用Passport.js GitHub策略获取用户邮箱?调用API返回乱码
Markdown格式用法示例
标题层级
一级标题:GitHub OAuth邮箱获取问题排查
二级标题:问题现象
三级标题:乱码返回原因分析
无序列表
- 已成功获取GitHub用户基础信息
- 邮箱字段为null,需调用
/user/emails接口获取 - 携带accessToken请求后返回乱码内容
文本强调
调用GitHub API时,必须确保请求头的Authorization格式正确,且要接受gzip压缩响应。
代码展示
行内代码示例:https://api.github.com/user/emails
代码块示例:
passport.use(new GitHubStrategy({ clientID: process.env.GITHUB_CLIENT_ID, clientSecret: process.env.GITHUB_CLIENT_SECRET, callbackURL: "/callbackurl" }, function(accessToken, refreshToken, profile, done) { User.findOrCreate({ githubId: profile.id }, function (err, user) { axios.get('https://api.github.com/user/emails', { headers: { "Authorization": `Bearer ${accessToken}`, "Accept-Encoding": "gzip" }, responseType: 'arraybuffer' }).then((res) => { const decompressed = zlib.gunzipSync(res.data).toString(); console.log(JSON.parse(decompressed)); }); return done(err, user); }); } ));
引用内容
GitHub API默认返回gzip压缩的响应,如果客户端没有正确处理压缩,就会出现乱码。
链接示例
图片示例
内容的提问来源于stack exchange,提问作者Ritesh
相关产品推荐
相关产品推荐

