21

मेरे पास एक मौजूदा Google ड्राइव सक्षम एप्लिकेशन है जो Google जावा क्लाइंट लाइब्रेरी और सर्वर प्रवाह ऑथ का उपयोग कर रहा है।क्या ड्राइव के लिए जेएस क्लाइंट लाइब्रेरी के माध्यम से प्राधिकरण का उपयोग करते समय उपयोग करने के लिए किसी भी उपलब्ध Google खाते का चयन करने में सक्षम होना संभव है?

यदि आप एप्लिकेशन में लॉग इन नहीं हैं और यूआरएल पर नेविगेट करते हैं और आपने उस ब्राउज़र पर एक से अधिक Google खाते में लॉग इन किया है (केवल एक निजी Google खाता संभव है, तो किसी भी अतिरिक्त को Google व्यवसाय खाते होना चाहिए) OAuth कॉलबैक विकल्प चुनने के विकल्प प्रदान करता है कि कौन से Google खाते का उपयोग करना है।

हालांकि, जावास्क्रिप्ट क्लाइंट लाइब्रेरी का उपयोग करने के लिए स्विच का परीक्षण करते समय मैं gapi.auth.authorize का उपयोग करके एकाधिक खाता चयन स्क्रीन को सक्रिय करने में सक्षम नहीं हूं। क्या जेएस लाइब्रेरी का उपयोग करके एकाधिक खातों को संभालना संभव है?

अद्यतन: मैंने immediate पैरामीटर false के साथ प्रयास किया। जब तक मैं पॉपअप में खाता नहीं बदलता तब तक मैं लॉग इन कर सकता हूं। एक नए टैब में

https://accounts.google.com/o/oauth2/auth?client_id=433863057149.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/drive.install+https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&immediate=false&redirect_uri=postmessage&origin=https://drivedrawio.appspot.com&proxy=oauth2relay593063763&response_type=token&state=701344514&authuser=1

और कुछ नहीं होता: मैं खाता परिवर्तित करते हैं, मैं करने के लिए मिलता है। मेरे पास made a video to demonstrate है।

अद्यतन 2: This bug जेएल क्लाइंट लाइब्रेरी के खिलाफ mulitple खाते के डबल चयन की आवश्यकता के लिए स्वीकार कर लिया गया है।

उत्तर

42

आप निम्न पैरामीटर की वजह से बहु उपयोगकर्ता चयन स्क्रीन नहीं मिल रहा है: authuser=0 यह स्वचालित रूप से पहले खाते के साथ साइन-इन किया का चयन करता है (authuser=1 दूसरा आदि का चयन करेंगे ...)।

क्लाइंट लाइब्रेरी का उपयोग कर उस पैरा को हटाने के लिए वर्तमान में संभव नहीं है क्योंकि क्लाइंट लाइब्रेरी स्वचालित रूप से 0 पर सेट हो जाती है (यही कारण है कि यह बहु-खातों को संभालने का दावा नहीं करता है) यदि कोई मूल्य नहीं है तो एक तरीका इसे ओवरराइड करना है उदाहरण के लिए -1, यह बहु-खाता चयनकर्ता दिखाएगा। फिर आप user's profile or email तक पहुंचने के लिए भी पूछ सकते हैं, साथ ही आप अन्य एपीआई तक पहुंच मांगने और उपयोगकर्ता या उसके आईडी का ईमेल प्राप्त करने के लिए भी पूछ सकते हैं। फिर बाद के लेख पर आप user_id परम निर्दिष्ट कर सकते हैं जो उपयोगकर्ता-चयन स्क्रीन को बाईपास करेगा।

तो व्यवहार में, पहले इस तरह प्रमाणीकरण करें:

gapi.auth.authorize({client_id: <Your Client ID>, 
        scope: 'https://www.googleapis.com/auth/drive openid', // That requires access to Google Drive and to the UserInfo API 
        authuser: -1}); 

ऊपर के साथ ही समस्या यह है कि क्लाइंट लाइब्रेरी का स्वत: रीफ्रेश काम नहीं करेगा क्योंकि हर प्रमाणन बहु खाते पर अवरुद्ध द्वारा जाएगा चयन स्क्रीन।

gapi.auth.authorize({client_id: <Your Client ID>, 
        scope: 'https://www.googleapis.com/auth/drive openid', 
        user_id: <The User ID>, 
        authuser: -1}); 

उपयोगकर्ता की आईडी निर्दिष्ट करना सुनिश्चित करेंगे:

चाल, UserInfo एपीआई का उपयोग कर उपयोगकर्ता की आईडी प्राप्त एक सत्र कुकी में वह आईडी सहेजेंगे और इस तरह बाद में प्रमाणन पर इसका इस्तेमाल करने के लिए है बहु-खाता चयनकर्ता बाईपास है और क्लाइंट lib से टोकन के ऑटो-रीफ्रेश को फिर से काम करने की अनुमति देगा।

संदर्भ, अन्य URL परम कि उपयोगकर्ता प्रवाह को प्रभावित करने के लिए कर रहे हैं:

  • user_id: authuser से समान (नजरअंदाज बहु खाता चयन स्क्रीन), लेकिन आप ईमेल पते का उपयोग कर सकते हैं (उदाहरण के लिए [email protected]) या आप उपयोगकर्ता आईडी से हमारे ओपन आईडी कनेक्ट endpoint/गूगल + एपीआई/UserInfo एपीआई
  • approval_prompt से मिलता है: डिफ़ॉल्ट, auto है force करने के लिए सेट किया जा सकता है यकीन है कि अनुमोदन/अनुदान स्क्रीन दिखाया जाता है कि बनाने के लिए। यह सुनिश्चित करता है कि गैंट स्क्रीन को बाद के लेख (पहली बार के बाद) पर नहीं छोड़ा जाता है।
  • immediate: immediate थोड़ा मुश्किल है, जब true करने के लिए सेट यह अनुदान स्क्रीन (approval_prompt=auto की तरह थोड़े) ही उपयोगकर्ता पहले से पहले स्वीकृति प्रदान की बायपास करेंगे, लेकिन अगर उपयोगकर्ता स्वीकृति प्रदान नहीं की गई है कि पहले आप एक त्रुटि के साथ पुनः निर्देशित किया जाएगा : error=immediate_failed। यदि false पर सेट किया गया है तो यह approval_prompt मान द्वारा व्यवहार सेटअप पर विशेष व्यवहार नहीं करेगा।

नोट: immediate=true और approval_prompt=force एक अवैध संयोजन है।

मुझे लगता है कि क्लाइंट लाइब्रेरी immediate परम उपयोग कर रहा है ताकि अगर वह error=immediate_failed हो जाता है यह authuser परम बिना एक प्रमाणन प्रवाह को पुनः आरंभ करेगा, लेकिन वह केवल अटकलों :) है

+0

जबकि, आपने तकनीकी रूप से सवाल का जवाब दिया है "मैं ड्राइव के लिए जेएस क्लाइंट लाइब्रेरी का उपयोग करते समय किस Google खाते का उपयोग करना चाहता हूं?", मेरा प्रश्न वास्तव में गलत शीर्षक था, क्षमा करें :)। – David

+0

मैंने अभी इसका उत्तर दिया क्योंकि मैं बेहतर जानता हूं कि हमारे ओथ एंड जेपी क्लाइंट लाइब्रेरी की तुलना में एंडपॉइंट्स कैसे काम करते हैं: डी मुझे अनजान था कि यह बहु-उपयोगकर्ता खातों के साथ काम नहीं करता है:/ – Nivco

+0

आपको यह पैरामीटर कहां मिला? इसे https://developers.google.com/+/web/api/javascript – chulian

3

ओएथ अनुदान पहुंच पृष्ठ केवल तभी दिखाया जाता है जब तत्काल मोड में नहीं, क्या यह immediate पैरामीटर को गलत पर सेट करने पर अपेक्षित कार्य करता है?

+0

इससे अनुदान पहुंच पृष्ठ उत्पन्न होता है लेकिन खाता चयन स्क्रीन नहीं जो इससे पहले होनी चाहिए। –

0

लेखक पैरामीटर पर ध्यान दें। उदाहरण के लिए इसे "2" पर सेट करें और आपको लॉगिन के लिए संकेत दिया जाएगा भले ही आप पहले ही प्रमाणीकृत हैं।