Как выйти из аккаунта Google с помощью AngularJS

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

Решение, с которым я пришел, было:

/**
 * 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 вы бы использовали?


person Herring    schedule 03.12.2014    source источник


Ответы (2)


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

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

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

person ngasull    schedule 03.12.2014
comment
Я бы согласился с этим, но, к сожалению, не смог убедить клиента, который все еще хочет выйти из аккаунта Google. - person Herring; 03.12.2014
comment
Может быть, вы можете показать ссылку на страницу выхода из Google? В любом случае вы не сможете динамически выйти из Google со своего веб-сайта, потому что страница выхода должна быть открыта для проверки файлов cookie / локальных данных. Я думаю, что решение состоит в том, чтобы объяснить вашему клиенту, что это будет нарушением безопасности, если браузеры разрешат этот межсайтовый запрос. - person ngasull; 04.12.2014
comment
Я действительно могу выйти из системы, как я написал в посте. Просто я вижу сообщение об ошибке - это меня беспокоит. - person Herring; 05.12.2014

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

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

Обычный выход — это одна строка js (исходный код):

gapi.auth.signOut();

Если я не ошибаюсь, то, что вы делаете в первую очередь в своем коде (т.е. отменяете токен доступа), предоставляет возможность удалить связь между аккаунтом в вашем приложении и аккаунтом Google, используемым для входа. Как указано в ссылке, вы должны предоставить эту опцию пользователю, чтобы следовать правилам для разработчиков g+, но это не то же самое, что выйти из аккаунта. Возможно, вам как пользователю следует попробовать эти две функции на сайте, предоставляющем вход в систему g+, например, переполнение стека. (Обязательно узнайте свой пароль, прежде чем отзывать связь с g+.)

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

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

person dotpush    schedule 03.12.2014
comment
Вы правы в том, что отмена доступа работает так же, как и gapi.auth.signOut();, так что я бы, вероятно, переключился на это, так как это выглядит более аккуратно. К сожалению, клиент настаивает на выходе из аккаунта Google... - person Herring; 03.12.2014
comment
Если вы можете поговорить со своим клиентом, возможно, вам следует попробовать что-то вроде «У вас есть пример общедоступного веб-сайта, который использует вход g+ так, как вы хотите?». Затем, посмотрев на сайт, вы либо найдете способ сделать это, либо скажете своему клиенту, что сайт этого не делает и что это может быть невозможно. - person dotpush; 03.12.2014
comment
Обновление: похоже, что gapi.auth.signOut() не отзывает токены доступа. Это не то, что я ищу. - person Herring; 03.12.2014
comment
Если вы действительно хотите отозвать токен доступа при выходе из системы, ваша функция выхода будет немного особенной... Это все равно, что забыть, что эта учетная запись g+ связана с учетной записью приложения и может использоваться для входа в приложение. - person dotpush; 04.12.2014