2014-11-18 1 views
2

Я пытаюсь внедрить Google+ Signin на веб-сайте, следуя инструкциям от here для гибридной системы входа в систему. Я предпочитаю иметь свою собственную кнопку для входа в систему, поэтому я решил реализовать G + signin посредством простого метода JavaScript gapi.auth.signIn, следуя инструкциям от here.Google+ Javascript Signin Uncaught TypeError at cb = gapi.loaded_0: 41

Вот кнопка у меня на моей главной странице, которая инициирует вход -

<a id="gplogin" href="#"> 
    <img src="{% static 'images/gp.png' %}"/> 
</a> 

Вот соответствующий JQuery кусок, который поднимает щелчок, это работает тоже хорошо -

$('#gplogin').click(
    function() { 
    GPLogin(); 
    return false; 
    }); 

Вот часть GPLogin(), которая, вероятно, там, где она бросает исключение Javascript -

function GPLogin() { 
    // Define all the login params 
    var additionalParams = { 
     'clientid' : 'xxxxxxxx.apps.googleusercontent.com', 
     'scope' : 'https://www.googleapis.com/auth/plus.login', 
     'redirecturi' : 'postmessage', 
     'requestvisibleactions' : 'http://schema.org/AddAction', 
     'cookiepolicy' : 'single_host_origin', 
     'accesstype' : 'offline', 
     // 'approvalprompt' : 'force', 
     'callback': gpSigninCallback 
    }; 
    console.log('Logging in to Google Plus with additional params - '); 
    for(var param in additionalParams) 
     console.log(param + " : " + additionalParams[param]) 

    gapi.auth.signIn(additionalParams); 
} 

Вот моя функция gpSigninCallback, которая никогда не вызывался, за счет исключения брошенной когда я нажимаю «gplogin» ссылка

function gpSigninCallback(authResult) { 
console.log("GP Signin response " + authResult); 
for(var res in authResult) 
    console.log(res + " : " + authResult[res]) } 

Исключение, которое бросают, когда я нажимаю на ссылку gplogin является

Uncaught TypeError: Cannot convert object to primitive value at cb=gapi.loaded_0:41 

, как это наблюдается в Chrome.

Всплывающее окно выбора пользователя появляется, как ожидается, и я могу выбрать пользователя, но после этого ничего не происходит. Я почти уверен, что это небольшая вещь, которую я где-то просматриваю, но я не могу найти ее сам. Любая помощь будет оценена по достоинству. Спасибо !

+0

Просто подумал, что я должен уточнить, я загружаю API G + JS в на странице - ' ' Кроме того, параметр обратного вызова передается как имя функции/строка или сам объект функции, не имеет значения. – radhashankark

ответ

3

После довольно многого поиска я сузил его до простой ошибки Javascript с моей стороны. Я начал с комментариев всех операторов отладки и печати объектов как есть. Вот где я обнаружил, что моя функция обратного вызова получала объект для authResult [res] в одной из итераций, и, поскольку я пытался связать его с String, запускался TypeError.

Поток входа в Google Plus был прекрасен все время, так как мой JS был проблемой. Он работал в GPLogin() при попытке зарегистрировать дополнительные параметры [param], потому что они все строки и не имеют проблем с конкатенацией со строками.

Смежные вопросы