2015-04-23 16 views
16

tôi đã đi một cách chính xác bởi các hướng dẫn cho việc tích hợp đăng nhập google:Lỗi Loại: gapi.auth2 không xác định

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

công trình đăng nhập, nhưng ký-out cho một lỗi javascript trong dòng:

var auth2 = gapi.auth2.getAuthInstance();

lỗi này là:

gapi.auth2 undefined

tôi bao gồm nền tảng li google brary as instructed:

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

Tại sao nó không hoạt động?

+0

Tôi có một ví dụ khá tối giản của việc sử dụng Google Drive (mà cũng yêu cầu xác thực) trong javascript. Toàn bộ mẫu được chứa hoàn toàn trong một trang html duy nhất của 170 dòng: http://dannyruijters.nl/webtex/googledrive.html Có thể giúp bạn giải quyết vấn đề của mình. –

Trả lời

40

Có phải signIn và signOut được sử dụng trên cùng một trang không? Div g-signin2 tải và nhập gapi.auth2 để nó hoạt động miễn là chúng nằm trên cùng một trang.

Trong trường hợp signOut ở trên trang riêng biệt, bạn nên tải thủ công và init thư viện gapi.auth2.

Full dụ (bạn phải thay thế YOUR_CLIENT_ID với client_id thực tế của bạn):

<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

Có phải 'gapi.load' được ghi lại ở bất kỳ đâu? Nó dường như không phải là một phần của tài liệu tham khảo: https://developers.google.com/identity/sign-in/web/reference –

+0

Tình cảm tương tự ở đây @MicahZoltu. Tôi đoán nếu bạn có nút '

'trên trang của bạn (tất cả các ví dụ về tài liệu), API sẽ được tải cho bạn vì nút này sử dụng nút đó, nhưng đối với các trường hợp chúng tôi không có nút, bạn phải báo cho' đối tượng gapi' mà API cần tải vì nó gói gọn tất cả các API nền tảng của Google (và có thể tìm thấy nó một cách không khôn ngoan để tải tất cả chúng) – Theson

+0

cảm ơn vì giải pháp, tôi đã bị kẹt trong một thời gian dài – John

Các vấn đề liên quan