के लिए रीफ्रेश टोकन का आदान-प्रदान करने में असमर्थ मेरी मशीन पर कुछ SSL issues के साथ संघर्ष करने के बाद, मैं अभी भी Google रूबी क्लाइंट एपीआई के माध्यम से किसी उपयोगकर्ता के ब्लॉगर खाते तक पहुंचने का प्रयास कर रहा हूं।रेल Google क्लाइंट एपीआई - एक्सेस टोकन
- रेल 3.2.3
- रूबी 1.9.3
- OAuth2 (0.8.0)
- omniauth (1.1.1)
- omniauth-google-OAuth2: मैं निम्नलिखित का उपयोग कर रहा (0.1.13)
- गूगल-api-ग्राहक (0.4.6)
मैं सफलतापूर्वक उपयोगकर्ताओं को प्रमाणित और गूगल एक के माध्यम से अपने ब्लॉग का उपयोग कर सकते प्रमाणीकरण के समय पीआई। जब कोई उपयोगकर्ता लॉग इन करता है, तो मैं Google से प्राप्त access_token
और refresh_token
स्टोर करता हूं। और access_token
समाप्त होने तक सब कुछ बढ़िया काम करता है। मैं एक नई access_token
के लिए refresh_token
का आदान-प्रदान करने वाली कार्यक्षमता बनाने की कोशिश कर रहा हूं, लेकिन दीवारों के खिलाफ आ रहा हूं।
client = Google::APIClient.new
token_pair = auth.oauth_token # access_token and refresh_token received during authentication
# Load the access token if it's available
if token_pair
client.authorization.update_token!(token_pair.to_hash)
end
# Update access token if expired
if client.authorization.refresh_token && client.authorization.expired?
client.authorization.fetch_access_token!
end
blogger = client.discovered_api('blogger', 'v3')
result = client.execute(
api_method: blogger.blogs.list_by_user,
parameters: {'userId' => "self", 'fields' => 'items(description,id,name,url)'},
headers: {'Content-Type' => 'application/json'})
इस कोड को पूरी तरह से काम करता है, जबकि access_token
मान्य है: एक उदाहरण के रूप client documentation का उपयोग करना, इस कोड को मैं उपयोग कर रहा हूँ है। जैसे ही यह समाप्त हो रहा है, हालांकि के रूप में, मैं 2 समस्याओं दिखाई दे रही है:
- हालांकि मैं जानता हूँ कि टोकन समाप्त हो रहा है (मैं डेटाबेस में
expires_at
मूल्य देख लिया है),client.authorization.expired?
रिटर्नfalse
- वहाँ एक अलग तरीका है मैं डेटाबेस में मान का उपयोग करने के अलावा टोकन की समाप्ति की जांच कर सकता हूं? - जब मैं
client.authorization.fetch_access_token!
के निष्पादन को मजबूर करता हूं तो मुझेinvalid_request
त्रुटि मिलती है।
कोई मुझे पता है कि मैं ग्राहक एपीआई का उपयोग कर एक नया access_token
के लिए एक refresh_token
विनिमय कर सकते हैं तो कृपया कर सकते हैं? यहां तक कि यदि आप जानते हैं कि इसे किसी अन्य भाषा में कैसे करना है, तो यह एक बड़ी मदद होगी क्योंकि मैं इसे रूबीफी की कोशिश कर सकता हूं। धन्यवाद!!
brimil01, आप आदमी हैं !! मुझे यह भी नहीं पता कि यह क्यों काम करता है और HTTP कॉल करने के मेरे अन्य प्रयास क्यों नहीं थे, लेकिन मैं इसे 12 घंटों तक देख रहा हूं, इसलिए मैं कल इसे समझूंगा। आपका कोड पूरी तरह से काम करता है और आपने मुझे बड़े पैमाने पर सिर-बैंगिंग से बचा लिया है, बहुत सराहना की। – cerrina
धन्यवाद। थोड़ी देर के लिए यह पता लगाने की कोशिश कर रहा था। –
मुझे यह पोस्ट करने पर प्रतीत होता है: # "invalid_request"}, @response = # <नेट :: HTTPBadRequest 400 खराब अनुरोध readbody = true> , @headers = {"कैश-कंट्रोल" => ["नो-कैश, नो-स्टोर, अधिकतम आयु = 0, अवश्य-पुनरीक्षित"], "प्रगामा" => ["नो-कैश"], "समाप्त हो जाती है" => ["शुक्र, 01 जनवरी 1 99 0 00:00:00 जीएमटी"], "तिथि" => ["बुध, 27 मार्च 2013 08:50:48 जीएमटी"], "सामग्री-प्रकार" => ["आवेदन/जेसन "]," एक्स-कंटेंट-टाइप-ऑप्शन "=> [" नोस्निफ "]," एक्स-फ्रेम-विकल्प "=> [" सैमोरिजिन "]," एक्स-एक्सएसएस-प्रोटेक्शन "=> [" 1; मोड = ब्लॉक "]," सर्वर "=> [" जीएसई "]," कनेक्शन "=> [" करीबी "]}> ... –