2012-07-13 13 views
10

OAuth प्रमाण-पत्रों का अनुरोध करते समय, मैं ऑफ़लाइन या ऑनलाइन होने के लिए access_type निर्दिष्ट कर सकता हूं।access_type = ऑनलाइन उचित कब है? : OAuth2 - Google API

ऑनलाइन पहुंच प्रकार का चयन करने से उपयोगकर्ताओं को लॉगिन करने पर हर बार मेरे ऐप तक पहुंच को मंजूरी मिलती है। ऐसा क्यों है? क्या उपयोगकर्ता ने पहले से ही मेरे ऐप को मंजूरी नहीं दी है?

# 1 अद्यतन:

मैं अपने approval_prompt 'ऑटो' के लिए निर्धारित किया।
यदि मैं किसी भी कुकीज को हटाए बिना Google से लॉग आउट करता हूं, तो यह मुझे फिर से संकेत नहीं देता है। लेकिन कुकीज़ को हटाने से अनुदान स्क्रीन वापस आती है।

अद्यतन # 2:

यह OAuth खेल का मैदान के माध्यम से ठीक काम करता है। http://code.google.com/oauthplayground/

वेब सर्वर अनुप्रयोग https://developers.google.com/accounts/docs/OAuth2WebServer

# 3 अद्यतन के लिए OAuth 2.0 का उपयोग करना: प्रासंगिक कोड के टुकड़े

सहायक विधि में सहायक विधि कॉलिंग OAuth यूआरएल

def build_auth_uri 
    return @client.authorization.authorization_uri(
    :access_type => :online, 
    :approval_prompt => :auto 
    ).to_s 
end 

उत्पन्न करने के लिए देखें

<a href="<%= build_auth_uri %>"> Connect Me! </a> 

वेबपेज

https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&redirect_uri=http://localhost:3000/gclient/gcallback&response_type=code 
+0

मुझे भी सटीक मुद्दे का सामना करना पड़ रहा है। नीचे मेरा अनुरोध यूआरएल खोजें: 'https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com /auth/userinfo.profile&state=profile&redirect_uri=http: // localhost/oacallback और response_type = code और client_id = 123.apps.googleusercontent.com और approval_prompt = auto और access_type = ऑनलाइन' –

+1

@jayyov व्यवहार अभी भी मेरे लिए अनियमित है। स्थानीयहोस्ट बनाम होस्टेड वेबसाइट पर भी ऐसा करने के बीच एक अंतर लगता है। –

+0

क्या इसका कोई समाधान कभी था? मैं एक ही मुद्दा देख रहा हूँ। मैंने यह भी देखा है कि इससे कोई फर्क नहीं पड़ता कि मैं ऐप को कितनी बार स्वीकृति देता हूं, मेरे प्रबंधित ऐप्स पेज में दिखाई नहीं देता है। – mwielbut

उत्तर

13

वहाँ एक अन्य पैरामीटर है कि इन प्रवाह में चलन में आता है और मुझे लगता है कि आप इसे में चला रहे हैं पर जेनरेट OAuth यूआरएल। यह approval_prompt पैरामीटर है।

जब access_type=online आपको approval_prompt के लिए एक मान निर्दिष्ट करने की भी अनुमति है। यदि यह approval_prompt=force पर सेट है, तो आपके उपयोगकर्ता को हमेशा संकेत दिया जाएगा, भले ही वे पहले से ही दे चुके हैं।

दूसरी ओर, जब access_type=offline, approval_prompt केवल approval_prompt=force करने के लिए सेट किया जा सकता है, लेकिन यह प्रतिबंध की भरपाई के लिए आप भी एक refresh_token जो आप अपने पहुँच टोकन ताज़ा करने के लिए उपयोग कर सकते हैं प्रदान की जाती है।

यूआरएल जांचें कि आपका access_type=online खुल रहा है। approval_prompt=auto सेट करने का प्रयास करें। अनुदान स्क्रीन केवल पहली बार दिखाई देनी चाहिए।

+0

धन्यवाद जेनी। मुझे यह उल्लेख करना चाहिए था कि मैंने स्वत: को स्वीकृति_प्रोप्ट सेट किया है। मुझे अभी भी अनुदान स्क्रीन मिलती है। क्या यह कुकीज़ पर निर्भर करता है?मैं लॉगिन को रीस्टस्ट करने के लिए अपनी कुकीज़ साफ़ करता हूं। मैंने माना कि OAuth सर्वर उपयोगकर्ता की स्वीकृति संग्रहीत करता है। अगर मैं सिर्फ सभी कुकीज को साफ़ किए बिना Google का लॉगआउट करता हूं, तो यह अनुदान स्क्रीन नहीं दिखाता है। –

+0

यह हो सकता है। अगर आप अपनी सभी कुकीज़ साफ़ कर रहे हैं, तो आप Google से लॉग आउट हो जाएंगे और आपको प्रमाणित करने के लिए फिर से लॉग इन करने के लिए मजबूर होना होगा। क्या आपके पास अपने गलत व्यवहार कोड का उदाहरण आसान है? मुझे एक नज़र रखना अच्छा लगेगा :) – mimming

+0

Thx जेनी! मैंने प्रश्न में कुछ प्रासंगिक कोड स्निपेट जोड़े। क्या आपको इससे अधिक चाहिए? कुकीज़ के संबंध में, यदि कुकीज़ हटा दी जाती है, तो क्या उपयोगकर्ता को फिर से पहुंच प्रदान करने की आवश्यकता होगी? मैं समझ सकता हूं कि उन्हें फिर से प्रमाणीकृत करने की आवश्यकता है या नहीं। –

संबंधित मुद्दे