2012-03-26 20 views
7

नहीं भेजा जा रहा है मैं Google के दस्तावेज़ों के आधार पर PHP के साथ Google YouTube डेटा API का उपयोग करने का प्रयास कर रहा हूं: https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Refreshing_a_Token। OAuth के साथ प्रमाणीकरण करते समय मेरी समस्या आती है। मैं निम्नलिखित प्राधिकरण URL का उपयोग कर रहा हूं जो दस्तावेज़ों के समान है जो मेरे रीडायरेक्ट यूरी और एप्लिकेशन कुंजी को छोड़कर उपयोग करने के लिए कहता है।Google यूट्यूब एपीआई रीफ्रेश टोकन

$curl_options = Array(
      CURLOPT_POSTFIELDS => Array(
       'code' => $code, 
       'client_id' => $this->applicationKey, 
       'client_secret' => $this->applicationSecret, 
       'redirect_uri' => $this->redirect_uri . '/account.php?action=youtube_oauth', 
       'grant_type' => 'authorization_code' 
      ), 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_URL => 'https://accounts.google.com/o/oauth2/token' 
     ); 

हालांकि, मेरी प्रतिक्रिया कभी नहीं मुझे एक refresh_token देता है अपनी दस्तावेज़ीकरण का कहना है कि यह कार्य करना चाहिए:

$this->authorizationUrl = 'https://accounts.google.com/o/oauth2/auth?'; 
$this->authorizationUrl .= 'client_id=' . $this->applicationKey . '&'; 
$this->authorizationUrl .= 'redirect_uri=' . $this->redirect_uri . '/account.php?action=youtube_oauth&'; 
$this->authorizationUrl .= 'scope=https://gdata.youtube.com&'; 
$this->authorizationUrl .= 'response_type=code&'; 
$this->authorizationUrl .= 'access_type=offline'; 

फिर, जैसा कि डॉक्स कहने के लिए, मैं निम्नलिखित कर्ल। मुझे बस तीन अन्य प्रतिक्रिया आइटम मिलते हैं।

इस तरह के कुछ प्रश्न: Get refresh token google api ने request_prompt = force का उपयोग करने के लिए कहा है, लेकिन यह या तो काम नहीं करता है और पूरी तरह से access_type = ऑफ़लाइन होने के उद्देश्य को हरा देता है।

कोई विचार है कि मुझे 4 प्रतिक्रिया वस्तुओं में से 3 के साथ वैध प्रतिक्रिया क्यों मिलेगी?

उत्तर

2

आप google oauth2 playground (https://code.google.com/oauthplayground/) आज़मा सकते हैं और देख सकते हैं कि आपके पैरा और वहां के अंतर क्या हैं।

28

OAuth2.0 किए गए दस्तावेज़ों की offline access भाग से:

आपका आवेदन एक ताज़ा टोकन प्राप्त करता है, यह भविष्य में उपयोग के लिए है कि ताज़ा टोकन संगृहीत करने के लिए महत्वपूर्ण है। यदि आपका एप्लिकेशन रीफ्रेश टोकन खो देता है, तो उसे उपयोगकर्ता को एक और रीफ्रेश टोकन प्राप्त करने से पहले सहमति के लिए फिर से संकेत देना होगा। यदि आपको सहमति के लिए उपयोगकर्ता को पुनः संकेत देने के लिए की आवश्यकता है, तो प्राधिकरण कोड अनुरोध में approval_prompt पैरामीटर शामिल करें, और force पर मान सेट करें।

इसलिए, जब आप पहले से ही पहुंच प्रदान की है, authorization_code के grant_type के लिए अनुवर्ती अनुरोधों refresh_token वापस नहीं होगा, भले ही access_type सहमति पेज की क्वेरी स्ट्रिंग में offline करने वाले थे।

के रूप में पहले से ही एक प्राप्त करने के बाद, उपर्युक्त उद्धरण में कहा गया है, ताकि एक नईrefresh_token प्राप्त करने के लिए, आप अपने उपयोगकर्ता शीघ्र, जो आप force को approval_prompt सेट करके ऐसा कर सकते हैं के माध्यम से वापस भेजने की जरूरत होगी।

चीयर्स,

पुनश्च यह परिवर्तन के साथ-साथ एक blog post में घोषणा की गई थी।

+1

समाधान के लिए धन्यवाद! – WHITECOLOR

+3

कोई इसे उत्तर के रूप में स्वीकार करता है! –

+1

किसी और के फायदे के लिए मेरे स्वयं के भ्रम का सामना करने के लिए, एक बार जब आप 'रीफ्रेश टोकन' प्राप्त कर लेते हैं तो आपको इसे _refresh_ करने की आवश्यकता नहीं होती है क्योंकि आप उसी बार एक बार उपयोग कर सकते हैं। एकमात्र समय आपको एक नया समय चाहिए यदि आप इसे खो देते हैं या उपयोगकर्ता आपकी पहुंच को रद्द कर देता है। – jeteon