google-calendar - रीफ्रेश टोकन google api प्राप्त करें




token access-token gdata (7)

यह Google आधिकारिक एसडीके का उपयोग कर PHP में पूरा कोड है

$client = new Google_Client();
## some need parameter
$client->setApplicationName('your application name');
$client->setClientId('****************');
$client->setClientSecret('************');
$client->setRedirectUri('http://your.website.tld/complete/url2redirect');
$client->setScopes('https://www.googleapis.com/auth/userinfo.email');
## these two lines is important to get refresh token from google api
$client->setAccessType('offline');
$client->setApprovalPrompt('force'); # this line is important when you revoke permission from your app, it will prompt google approval dialogue box forcefully to user to grant offline access

मुझे अपने कोड के साथ मेरा ताज़ा टोकन नहीं मिल सकता है। मुझे केवल मेरा एक्सेस टोकन, टोकन टाइप इत्यादि मिल सकता है, मैंने कुछ लॉगिन ट्यूटोरियल का पालन किया है जैसे मेरे लॉगिन यूआरएल पर access_type=offline :

echo "<a href='https://accounts.google.com/o/oauth2/auth?" 
    . "access_type=offline&client_id=123345555.apps.googleusercontent.com& "
    . "scope=https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/plus.me&response_type=code& "
    . "redirect_uri=http://www.sample.com/sample.php&state=/profile'>Google</a>";

और मेरे खेतों तक पहुंच टोकन प्राप्त करने में:

$fields=array(
    'code'=>  urlencode($authcode),
    'client_id'=> urlencode($clientid),
    'client_secret'=> urlencode($clientsecret),
    'redirect_uri'=> urlencode($redirecturi),
    'grant_type'=> 'authorization_code',
);

लेकिन मुझे refresh_token नहीं मिल सकता है , बस access_token , token_type , id_token और expires_in


हमारे ऐप के लिए हमें इन दोनों पैरामीटर access_type=offline&prompt=consent का उपयोग करना पड़ा। approval_prompt=force हमारे लिए काम नहीं करता है


अगर मैं user987361 के उत्तर पर विस्तार कर सकता हूं:

OAuth2.0 दस्तावेज़ों के ऑफ़लाइन पहुंच भाग से:

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

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

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

चीयर्स,

पीएस इस परिवर्तन की घोषणा ब्लॉग पोस्ट में भी की गई थी।


हाय मैंने निम्नलिखित चरणों का पालन किया और मैं रीफ्रेश टोकन प्राप्त करने में सक्षम था।

प्राधिकरण प्रवाह में दो कदम हैं।

  1. https://accounts.google.com/o/oauth2/auth? का उपयोग कर प्राधिकरण कोड प्राप्त करना है https://accounts.google.com/o/oauth2/auth? यूआरएल।

    इसके लिए एक पोस्ट अनुरोध निम्नलिखित पैरामीटर प्रदान किया जाता है। 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE + '&access_type=offline' उपरोक्त प्रदान करना एक प्राधिकरण कोड प्राप्त होगा।

  2. Https://accounts.google.com/o/oauth2/token का उपयोग करके AcessToken और RefreshToken को पुनर्प्राप्त करना https://accounts.google.com/o/oauth2/token? यूआरएल। इसके लिए एक पोस्ट अनुरोध निम्नलिखित पैरामीटर प्रदान किया जाता है।

    "कोड": कोड, "client_id": सीआईडी, "client_secret": सीएसईसीआरईटी, "redirect_uri": रेडियरेक्ट, "grant_type": "authorization_code",

तो एक बार जब आप अनुमतियों को अधिकृत करते हैं तो आपके पहले प्रयास में आप ताज़ा टोकन प्राप्त कर पाएंगे। बाद के प्रयास ताज़ा टोकन प्रदान नहीं करेंगे। यदि आप टोकन को फिर से एप्लिकेशन में एक्सेस को निरस्त करना चाहते हैं।

उम्मीद है कि यह किसी चीयर्स की मदद करेगा :)


ओएथ के वास्तविक मोड में दो परिदृश्य हैं। एक्सेस की सामान्य और डिफ़ॉल्ट शैली को ऑनलाइन कहा जाता है। कुछ मामलों में, जब उपयोगकर्ता मौजूद नहीं है, तो आपके एप्लिकेशन को Google API तक पहुंचने की आवश्यकता हो सकती है, यह ऑफ़लाइन परिदृश्य है। पहले प्राधिकरण कोड एक्सचेंज के दौरान ऑफ़लाइन परिदृश्य में एक ताज़ा टोकन प्राप्त किया जाता है।

तो आप contexth_token कुछ परिदृश्य प्राप्त कर सकते हैं, सभी नहीं।

आपके पास developers.google.com/identity/protocols/… में सामग्री हो सकती है।


इसे अपने यूआरएल पैरामीटर में जोड़कर पता चला

approval_prompt = बल


ठीक करने के लिए, मैंने https://accounts.google.com/IssuedAuthSubTokens पर ऐप तक पहुंच रद्द कर दी और उसके बाद पुनः प्रयास किया, मैं एपीआई को सही तरीके से एक्सेस करने में सक्षम था।

सूची में दायरा होने के बावजूद, और Google के OAuth2 अनुदान पृष्ठ पर प्रदर्शित होने वाला दायरा, अतिरिक्त दायरा नहीं दिया गया था।





google-calendar token access-token gdata