php - नया एक्सेस टोकन प्राप्त करने के लिए OAuth Refresh टोकन का उपयोग करें-Google API



oauth-2.0 google-oauth (1)

वाह, यह मुझे समझने में काफी समय लगा, और जवाब मेरे लिए काफी अपूर्ण लग रहे थे

प्रारंभ करने से पहले कृपया ध्यान रखें कि यह उत्तर मानता है कि आप 26 मई 2014 को नवीनतम Google API PHP लाइब्रेरी का उपयोग कर रहे हैं।

1 - सुनिश्चित करें कि ऐप का प्रकार आपके ऐप अनुरोध offline । एक refresh_token अन्यथा प्रदान नहीं किया गया है। Google से: यह फ़ील्ड केवल तभी उपस्थित होता है यदि access_type = ऑफ़लाइन प्राधिकरण कोड अनुरोध में शामिल है

$gClient->setAccessType('offline');

2 - पहले प्राधिकरण पर, आगे की पहुंच के लिए प्रदान किए गए refresh_token करते refresh_token । यह कुकीज़ , डेटाबेस , आदि के माध्यम से किया जा सकता है। मैंने डेटाबेस पर स्टोर करना चुना है:

$tokens = json_decode($gClient->getAccessToken()); /* Get a JSON object */
setRefreshToken($con, $tokens->refresh_token /* Retrieve form JSON object */);

3 - यदि AccessToken की अवधि समाप्त हो गई है या नहीं, और Google से एक ताज़ा टोकन का अनुरोध करें यदि ऐसी स्थिति है

if ($gClient->isAccessTokenExpired()) {    
  $refreshToken = getRefreshToken($con, $email); 
  $gClient->refreshToken($refreshToken);
}  

जहां getRefreshToken हमारे डेटाबेस से पहले से संग्रहीत refresh_token पुनर्प्राप्त कर रहा है, और फिर हम उस मान को क्लाइंट की refreshToken विधि से पास करते हैं।

त्वरित नोट: यह याद रखने की कुंजी है कि यदि आपने पहले अपने ऐप को अधिकृत किया है, तो आपको शायद प्रतिक्रिया पर एक refresh_token नहीं दिखाई देगा, क्योंकि यह केवल पहली बार जब हम authenticate कहते हैं इसलिए, आप या तो https://www.google.com/settings/security पर जा सकते हैं और अपने ऐप पर प्रवेश को रद्द कर सकते हैं या क्लाइंट ऑब्जेक्ट बनाते समय आप निम्न पंक्ति जोड़ सकते हैं:

$gClient->setApprovalPrompt('force');

Google से: यदि मूल्य बल है, तो उपयोगकर्ता सहमति पृष्ठ देखता है भले ही वे पहले दिए गए स्कोप के दिए गए सेट के लिए आपकी एप्लिकेशन को सहमति दे। बदले में यह सुनिश्चित करता है कि प्रत्येक प्राधिकरण पर एक refresh_token प्रदान किया गया है।

यहां पूर्ण नमूना: http://pastebin.com/jA9sBNTk

मेरा ऐप सरल है, यह उपयोगकर्ता को प्रमाणित करने के लिए Google+ एपीआई से जुड़ता है, और यदि सफल होता है, तो यह उपयोगकर्ता के ईमेल को पुनः प्राप्त करता है और फिर पुनः प्राप्त ईमेल के आधार पर दिए गए डेटाबेस पर एक श्रृंखला की संचालन करता है।

मेरा मुख्य मुद्दा यह है कि हर घंटे, मेरा एक्सेस टोकन समाप्त हो जाता है, और मुझे यह नहीं पता कि यह कैसे "ताज़ा करें" मुझे निम्नलिखित त्रुटि मिलती है, जिसे मैं उम्मीद करता हूं:

The OAuth 2.0 access token has expired, and a refresh token is not available.

मैं वर्तमान में एक डाटाबेस पर पहुँच टोकन को संचित कर रहा हूं, और यदि आवश्यक हो तो मैं पुनः प्राप्त कर सकता हूं। मेरा एकमात्र सवाल यह है कि मैं नया टोकन प्राप्त करने के लिए उस टोकन का उपयोग कैसे करूं?





google-api-php-client