2015-04-23 46 views
16

मैं एकीकृत Google साइन-इन के लिए निर्देश द्वारा वास्तव में चला गया:लेखन त्रुटि: gapi.auth2 अपरिभाषित

https://developers.google.com/identity/sign-in/web/sign-in#specify_your_apps_client_id

साइन-इन काम करता है, लेकिन साइन-आउट पंक्ति में एक जावास्क्रिप्ट त्रुटि देता है:

var auth2 = gapi.auth2.getAuthInstance();

त्रुटि है:

gapi.auth2 undefined

मैं गूगल मंच ली शामिल ब्रैरी निर्देशानुसार:

<script type='text/javascript' src='https://apis.google.com/js/platform.js' async defer></script> 

यह क्यों काम नहीं करता है?

+0

मैं जावास्क्रिप्ट में गूगल ड्राइव (जो भी प्रमाणीकरण की आवश्यकता है) का उपयोग कर के एक काफी minimalistic उदाहरण है। संपूर्ण नमूना पूरी तरह 170 लाइनों के एक HTML पृष्ठ में निहित है: http://dannyruijters.nl/webtex/googledrive.html शायद आपकी समस्या को हल करने में आपकी सहायता करता है। –

उत्तर

40

साइन इन और साइनऑट उसी पृष्ठ पर उपयोग किए जाते हैं? Div g-signin2 भार और inits gapi.auth2 ताकि इसे तब तक काम करना चाहिए जब तक वे एक ही पृष्ठ पर हों।

साइनऑट अलग पृष्ठ पर है, तो आपको मैन्युअल रूप से लोड और init gapi.auth2 लाइब्रेरी चाहिए।

पूर्ण उदाहरण (आप अपने वास्तविक client_id साथ YOUR_CLIENT_ID को बदलने के लिए):

<html> 
<head> 
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID"> 
</head> 
<body> 
    <script> 
    function signOut() { 
     var auth2 = gapi.auth2.getAuthInstance(); 
     auth2.signOut().then(function() { 
     console.log('User signed out.'); 
     }); 
    } 

    function onLoad() { 
     gapi.load('auth2', function() { 
     gapi.auth2.init(); 
     }); 
    } 
    </script> 
    <a href="#" onclick="signOut();">Sign out</a> 

    <script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script> 
</body> 
</html> 
+1

क्या 'gapi.load' कहीं भी दस्तावेज है? यह संदर्भ सामग्री का हिस्सा नहीं प्रतीत होता है: https://developers.google.com/identity/sign-in/web/reference –

+0

यहां पर समान भावनाएं @MicahZoltu। मेरा जंगली अनुमान है कि यदि आपके पृष्ठ पर '

' बटन है (जो सभी दस्तावेज उदाहरण हैं) तो एपीआई आपके लिए लोड हो जाने के बाद से आपके लिए लोड किया जाएगा, लेकिन ऐसे उदाहरणों के लिए जहां हमारे पास बटन नहीं है, आपको ' gapi' ऑब्जेक्ट जिसे एपीआई लोड करना है क्योंकि यह Google के सभी प्लेटफ़ॉर्म एपीआई को समाहित करता है (और शायद उन्हें सभी को लोड करने के लिए मूर्खतापूर्ण लगता है) – Theson

+0

समाधान के लिए धन्यवाद, मैं इसे लंबे समय से – John

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