2014-12-03 4 views
0
  • Я пишу приложение, которое использует Google API для аутентификации с помощью учетной записи G + в нашем приложении.
  • В настоящее время клиент хочет, чтобы выходить из системы не только отменяли токен доступа для нашего приложения, но и выходили из учетной записи Google, используемой для аутентификации.

Решение я пришел с был:Как выйти из учетной записи Google с помощью AngularJS

/** 
* Signs the user out. 
*/ 
HeaderCtrl.prototype.signOut = function() { 

    // this part revokes token 
    $http.jsonp('https://accounts.google.com/o/oauth2/revoke?token=' + 
     accessToken, { 
     params: { 
      callback: 'JSON_CALLBACK', 
      format: 'json' 
     } 
     }).success(/* Do stuff on success */); 

    // this part logs out from google account 
    $http.jsonp('https://accounts.google.com/logout'); 
}; 

Второй работает вызов, но регистрирует ошибку в обработке ответа:

Отказался выполнить скрипт из «https://accounts.google.com/logout», потому что его Тип MIME ('text/html') не является исполняемым, а строгая проверка типа MIME включена.

Какие способы выхода из учетной записи Google с помощью функции AngularJS вы бы использовали?

ответ

2

Вы не должны оставлять своих пользователей из Google, они, конечно же, не хотят этого. Таким образом, https://accounts.google.com/logout никогда не должно быть достигнуто.

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

Как только вызывается метод signOut, просто подумайте, что он больше не регистрируется и завершает сеанс на вашем сайте.

+0

Я согласен с этим, к сожалению, не смог убедить клиента, который все еще хочет выйти из учетной записи Google. – Herring

+0

Возможно, вы можете отобразить ссылку на страницу выхода из системы Google? В любом случае вы не сможете динамически выйти из Google с вашего сайта, потому что страница выхода должна быть открыта для проверки файлов cookie/локальных данных. Я думаю, что решение заключается в том, чтобы объяснить вашему клиенту, что это будет нарушение безопасности, если браузеры разрешили этот запрос на межсайтовый сайт. – blint

+0

Я действительно могу выйти, как я писал в сообщении. Просто я вижу сообщение об ошибке - это меня беспокоит. – Herring

2

Я думаю, вы пытаетесь сделать много вещей, которые не связаны с «обычным выходом».

Возможно, вам стоит поговорить с вашим «клиентом», чтобы уточнить истории пользователей, которые он хочет.

Нормальный выход из системы является одна линия Дж.С. (source):

gapi.auth.signOut(); 

Если я не ошибаюсь, то, что вы делаете первый в своем коде (т.е. отменив маркер доступа), это то, что обеспечивает вариант remove the association between the account on your app and the google account used for sign-in. Как указано в ссылке, вы должны предоставить этому пользователю возможность следовать политике разработчиков g +, но это не то же самое, что выходить из системы. Возможно, вы должны попробовать, как пользователь, эти две функции на сайте, обеспечивающие вход g +, например переполнение стека. (Обязательно узнайте свой пароль перед отзывом ассоциации g +.)

И для выхода из Google ваше приложение не должно этого делать, и Google не должен предоставлять вам способ сделать это. (И я предпочел бы думать, что это невозможно.)

Однако вы можете напомнить своему пользователю после выхода из системы, что ему может потребоваться выйти из Google. Попробуйте выйти из переполнения стека и посмотреть, что произойдет.

+0

Вы правы в том, что обращение к отзыву работает так же, как gapi.auth.signOut() ;, поэтому я бы, вероятно, переключился на это, поскольку он выглядит более аккуратным. К сожалению, клиент настаивает на выводе учетной записи Google ... – Herring

+0

Если вы можете поговорить с вашим клиентом, возможно, вам стоит попробовать что-то вроде «Есть ли у вас пример общедоступного веб-сайта, который использует g +, чтобы вы так хотели?». Затем, посмотрев на сайт, вы найдете способ сделать это или сообщите своему клиенту, что сайт не делает этого и что это может быть невозможно. – dotpush

+0

Обновление: выглядит как gapi.auth.signOut() не отменяет токены доступа. Это не то, что я ищу. – Herring