5

मैं इसका उपयोग करके एथ लागू कर रहा हूं और वर्तमान में जब उपयोगकर्ता साइन इन करने के लिए बटन क्लिक करता है और auth2 खाता चयन/लॉगिन विंडो शो करता है तो मैं वास्तव में लोडिंग आइकन दिखा रहा हूं।यह निर्धारित करने के लिए कि क्या Google auth2.signIn() विंडो उपयोगकर्ता द्वारा बंद की गई थी?

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

मैं सोच रहा था कि किसी के पास इसका समाधान है या नहीं?

+0

हाय दीप .. यू इस के लिए किसी भी slolution मिला? – Warrior

उत्तर

1

हालांकि एपीआई यह पता लगाने के लिए एक तंत्र प्रदान करता है कि जब उपयोगकर्ता डेनी बटन पर क्लिक करता है, तो यह पता लगाने के लिए एक अंतर्निहित तरीका नहीं है कि उपयोगकर्ता ने पॉपअप विंडो को अचानक बंद कर दिया है (या अपने वेब ब्राउज़र से बाहर निकला है, अपने कंप्यूटर को बंद कर दिया है, और इसी तरह)। से इनकार करें यदि आप उपयोगकर्ता को कम स्कॉप्स के साथ पुनः संकेत देना चाहते हैं (उदा। आपने "ईमेल" का अनुरोध किया है, लेकिन केवल प्रोफ़ाइल की आवश्यकता है और उपयोगकर्ता को आपको अपना ईमेल दिए बिना आगे बढ़ने देगा)।

साइन-इन कॉलबैक से प्रतिक्रिया त्रुटि, access_denied हैं, तो यह इंगित करता है उपयोगकर्ता से इनकार क्लिक किया बटन:

function onSignInCallback(authResult) { 
    if (authResult['error'] && authResult['error'] == 'access_denied') { 
    // User explicitly denied this application's requested scopes 
    } 
} 

आप का पता लगाने के लिए कि क्या खिड़की था बिना साइन-इन को लागू करने में सक्षम होना चाहिए बन्द है; यह लगभग all of the Google+ sample apps में प्रदर्शित किया गया है। संक्षेप में, आपको एक स्पिनर का उपयोग करने से बचने चाहिए क्योंकि आप कर रहे हैं और इसके बजाय उपयोगकर्ता ने सफलतापूर्वक साइन इन किया है जब तक उपयोगकर्ता ने सफलतापूर्वक साइन इन नहीं किया है।

यह अनुशंसा नहीं है कि आप ऐसा करते हैं, लेकिन पॉप-अप बंद करने का पता लगाने के लिए, आप कुछ कर सकते हैं वैश्विक window.open कॉल ओवरराइड, तो detect in window.unload या पोल चाहे खिड़की उपयोगकर्ता प्रमाणीकरण के बिना बंद हो गया की तरह:

var lastOpenedWindow = undefined; 
window.open = function (open) { 
    return function (url, name, features) { 
     // set name if missing here 
     name = name || "default_window_name"; 
     lastOpenedWindow = open.call(window, url, name, features); 
     return lastOpenedWindow; 
    }; 
}(window.open); 

var intervalHandle = undefined; 
function detectClose() { 
    intervalHandle = setInterval(function(){ 
    if (lastOpenedWindow && lastOpenedWindow.closed) { 
     // TODO: check user was !authenticated 
     console.log("Why did the window close without auth?"); 
     window.clearInterval(intervalHandle); 
    } 
    }, 500); 
} 

नोट के रूप में मैं इसे क्रियान्वित किया है, इस तंत्र अविश्वसनीय और विषय की स्थिति दौड़ के लिए है कि ।

+4

प्रतिक्रिया के लिए हाय धन्यवाद, हालांकि फेसबुक यह कैसे प्रदान करता है? मेरे पास फेसबुक और Google दोनों के विकल्प हैं जो मेरे पेज पर विकल्प हैं और फेसबुक की साइनइन विधि विफल होने का हल करती है यदि उपयोगकर्ता पॉपअप विंडो बंद कर देता है। मेरे लिए यह Google के हिस्से पर एक निरीक्षण की तरह लगता है।स्पिनर चीज सिर्फ उपयोगकर्ता को इंगित करने के लिए एक ux चीज है कि एक साइन इन प्रक्रिया शुरू हो गई है (यदि वे वास्तव में दूसरी विंडो पर क्लिक करते हैं और साइन इन विंडो का ट्रैक खो देते हैं)। – Deep

0

मैं अपने कोड को संशोधित करने का प्रयास करता हूं जो Google OAuth 2.0 विंडो को कॉल करता है।
आपको केवल अतिरिक्त AJAX विधि जोड़नी है जो Google OAuth त्रुटि परिणाम को कवर करती है।

gapi.auth2.getAuthInstance().signIn() 

इस एक को बदलें यह,

gapi.auth2.getAuthInstance().signIn().then(function(response){ 
    //If Google OAuth 2 works fine 
    console.log(response); 
}, function(error){ 
    //If Google OAuth 2 occured error 
    console.log(error); 
    if(error.error === 'popup_closed_by_user'){ 
     alert('Oh Dude, Why you close authentication user window...!'); 
    } 
}); 

यह है कि ...

गूगल OAuth 2.0 जानकारी के बारे में अधिक जानकारी के लिए, अगर आप इस लिंक पर जा सकते हैं।
जावास्क्रिप्ट पर https://developers.google.com/api-client-library/javascript/samples/samples#authorizing-and-making-authorized-requests
नमूना कोड:
https://github.com/google/google-api-javascript-client/blob/master/samples/authSample.html

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