2016-02-12 7 views
11

मैं Github’s OAuth flow का पालन कर रहा हूं, और एक एक्सेस टोकन प्राप्त कर रहा हूं जो मुझे उपयोगकर्ता के ईमेल दायरे तक पहुंच प्रदान करता है। जब मैं पहुँच टोकन के लिए एक कोड का आदान-प्रदान, https://github.com/login/oauth/access_token एंडपॉइंट का उपयोग करके, मैं निम्नलिखित प्रतिक्रिया मिल:उपयोगकर्ता के बावजूद गीथब उपयोगकर्ता ईमेल शून्य है: ईमेल स्कोप

{ 
    access_token: '83f42..xxx’, 
    token_type: 'bearer', 
    scope: 'user:email' 
} 

महान लग रहा है। इसलिए मैं टोकन का उपयोग मेरे उपयोगकर्ता डेटा प्राप्त करने के इस अनुरोध को भेजने,:

Accept-Language: en-us 
Accept: application/json 
Authorization: token 83f42..xxx 
Accept-Encoding: gzip, deflate 

GET https://api.github.com/user 

मैं एक प्रतिक्रिया के रूप मेरे उपयोगकर्ता वस्तु मिलता है, लेकिन ईमेल संपत्ति रिक्त है। क्या किसी और को भी यह समस्या हो रही है?

उत्तर

22

मुझे पता चला कि ऐसा क्यों होता है और इसे कैसे हल किया जाए। docs के अनुसार:

नोट: लौटे ईमेल उपयोगकर्ता की सार्वजनिक रूप से दिखाई ईमेल पता (या null उपयोगकर्ता अपने प्रोफ़ाइल में एक सार्वजनिक ईमेल पता निर्दिष्ट नहीं किया गया है) है।

अपने GitHub प्रोफ़ाइल सेटिंग में, लोक ईमेल के तहत, कुछ उपयोगकर्ताओं को (अपने आप सहित) उस विकल्प को निर्धारित किया है "मेरा ईमेल पता न दिखाएं।" /user पर कॉल केवल सार्वजनिक ईमेल पता देता है, इसलिए यदि उपयोगकर्ता इसे नहीं दिखाना चाहता है, तो एपीआई इसका सम्मान करेगा।

enter image description here

या नहीं, वे सार्वजनिक कर रहे हैं, /user/emails करने के लिए कॉल का उपयोग की परवाह किए बिना उपयोगकर्ता के ईमेल पते पाने के लिए। आप /user अनुरोध के रूप में बिल्कुल उसी तरह पहुँच टोकन का प्रयोग करेंगे:

Accept-Language: en-us 
Accept: application/json 
Authorization: token 83f42..xxx 
Accept-Encoding: gzip, deflate 

GET https://api.github.com/user/emails 

इस कॉल मेरा पीछा JSON उत्तर दिया:

[ 
    { 
    "email": "[email protected]", 
    "primary": true, 
    "verified": true 
    } 
] 
+2

का उपयोग Node.js, समाधान' गुंजाइश पारित करने के लिए है। ध्यान दें कि आपको उपयोगकर्ता के ईमेल की एक सरणी मिल जाएगी, यदि आप चाहते हैं तो 'प्राथमिक: सत्य' के लिए फ़िल्टर करें, आदि –

+0

@ एंटनड्रुक क्या आप विस्तृत कर सकते हैं? 'पासपोर्ट-गीथूब 'incantation क्या होगा? – Fergie

+0

@Fergie एक टिप्पणी के लिए बहुत लंबा, नीचे मेरा जवाब देखें। –

4

@Fergie एक टिप्पणी में यह फिट नहीं कर सकता है, इसलिए Node.js passport-github मामले के लिए जवाब दे: GitHubStrategy निर्माता रहे हैं: [ 'ईमेल उपयोगकर्ता:'] `पासपोर्ट GitHub साथ

var GitHubStrategy = require('passport-github').Strategy; 

passport.use('github-login', new GitHubStrategy({ 
    clientID: config.clientId, 
    clientSecret: config.secret, 
    callbackURL: config.host + config.callback, 
    passReqToCallback: true, // req object on auth is passed as first arg 
    scope: [ 'user:email' ], // fetches non-public emails as well 
}, 
    function (req, accessToken, refreshToken, profile, done) { 
    // find user by profile and update it 
    // or create the user object given the req, tokens and profile objs 
    // don't forget to call `done(null, user)` once done 
} 
)); 
संबंधित मुद्दे