2014-09-18 2 views
0

Я делаю расширение Chrome для Календаря Google, где мне нужно пройти аутентификацию на сервере Google Cloud Endpoints. Я использую библиотеку Google APIs для клиента JavaScript для этого, с помощью метода gapi.auth.authorize:Запуск всплывающего окна gapi автоматически закрывается и с ошибкой 401

var SCOPES = [ 
    "https://www.googleapis.com/auth/userinfo.email", 
    "https://www.googleapis.com/auth/calendar.readonly" 
]; 

function login() { 
    gapi.client.oauth2.userinfo.get().execute(function(response) { 
    if (response.code) { 
     console.log("cannot auth: " + response.code + " (" + response.message + ")"); 
    } else { 
     console.log("authed " + response.email); 
    } 
    }); 
} 

gapi.auth.authorize({ 
    client_id: CLIENT_ID, 
    scope: SCOPES.join(" "), 
    immediate: immediate 
}, login); 

Теперь иногда это работает, иногда это не делает. В этом случае появляется всплывающее окно и немедленно закрываются, и response объекта содержит:

{ 
    "code": 401, 
    "message": "Invalid Credentials", 
    "data": [ 
    { 
     "domain": "global", 
     "reason": "authError", 
     "message": "Invalid Credentials", 
     "locationType": "header", 
     "location": "Authorization" 
    } 
    ], 
    "error": { 
    "code": 401, 
    "message": "Invalid Credentials", 
    "data": [ 
     { 
     "domain": "global", 
     "reason": "authError", 
     "message": "Invalid Credentials", 
     "locationType": "header", 
     "location": "Authorization" 
     } 
    ] 
    } 
} 

Я не могу за жизнь мне найти источник ошибки, либо почему это происходит только иногда. Обратите внимание, что другой webapp использует тот же самый код (включая идентификатор клиента) и работает безупречно.

+0

для расширения хрома вы должны смотреть на https://developer.chrome.com/apps/identity – pinoyyid

+0

я не могу использовать 'chrome.identity', так как мне нужно разделить маркер между расширением и webapp и 'chrome.identity' требует другого типа идентификатора клиента. – Iso

+0

Я видел старые комментарии, которые не поддерживаются в Chrome Extensions. По крайней мере, это краевой пример для тестирования. Возможно, вы захотите пересмотреть. У меня есть приложение, которое с радостью использует chrome.identity в расширении, которое делится с gapi в веб-приложении, и у меня нет проблем с совместным использованием. – pinoyyid

ответ

-1
gapi.auth.authorize({ 
    client_id: CLIENT_ID, 
    scope: SCOPES.join(" "), 
    immediate: true 
}, login); 
Смежные вопросы