Упакованное приложение Google — API идентификации — removeCachedAuthToken

[google chrome 28] Я использую chrome.experimental.identity API в упакованном приложении, и getAuthToken работает нормально — токен get, с помощью которого я могу получить информацию о пользователе и т. д. Я понимаю, что API идентификации выходит из экспериментального в багажник, так как с chrome 29 я смогу использовать chrome.identity и удалить разрешение "experimental" из моего манифеста.

В: Если я хочу сделать кнопку выхода из системы, removeCachedAuthToken как это сделать? Я пытался использовать его в Experiment.Identity, но он ничего не делает.


person jakabadambalazs    schedule 27.06.2013    source источник


Ответы (3)


Нет. Это не тот путь.

removeCachedAuthToken — это функция, которая удаляет токен, полученный с помощью getAuthToken, из внутреннего кэша токенов. Однако это не аннулирует токен. Это означает, что приложение больше не сможет получить доступ к пользовательским ресурсам в текущем сеансе, пока оно снова не вызовет getAuthToken. Когда это произойдет, он сможет снова получить токен без необходимости предоставления пользователем доступа.

Таким образом, эта функция не предназначена для процедуры, связанной с выходом из системы. Это скорее механизм восстановления, когда вы понимаете, что токен доступа, который использует ваше приложение, устарел или недействителен по какой-либо другой причине. Это происходит, когда вы делаете запрос с использованием токена доступа, а статус ответа HTTP — 401 Unauthorized. В этом случае вы можете удалить токен, а затем запросить новый, используя getAuthToken. Чтобы имитировать такое поведение, вы можете отозвать соответствующий грант на странице аккаунтов Google или создать диагностический интерфейс: chrome: //identity-internals (в настоящее время в нем перечислены все кэшированные токены).

См. примеры приложений Chrome для GDocs и Identity. (Потяните запросы 114 для GDocs и 115 для Identity, если вы сделаете это в ближайшие несколько дней.)

person fgorski    schedule 01.07.2013
comment
Спасибо за объяснение. Это хорошо знать. Но я все еще в темноте. Как мне тогда отозвать токен? - person jakabadambalazs; 06.08.2013
comment
спасибо за указание на тот факт, что removeCachedAuthToken на самом деле не отменяет его. - person Silver Moon; 12.02.2016

Чтобы отозвать токен, используйте эту функцию из примера приложения Google.

function revokeToken() {
    user_info_div.innerHTML="";
    chrome.identity.getAuthToken({ 'interactive': false },
      function(current_token) {
        if (!chrome.runtime.lastError) {

          // @corecode_begin removeAndRevokeAuthToken
          // @corecode_begin removeCachedAuthToken
          // Remove the local cached token
          chrome.identity.removeCachedAuthToken({ token: current_token },
            function() {});
          // @corecode_end removeCachedAuthToken

          // Make a request to revoke token in the server
          var xhr = new XMLHttpRequest();
          xhr.open('GET', 'https://accounts.google.com/o/oauth2/revoke?token=' +
                   current_token);
          xhr.send();
          // @corecode_end removeAndRevokeAuthToken

          // Update the user interface accordingly
          changeState(STATE_START);
          sampleSupport.log('Token revoked and removed from cache. '+
            'Check chrome://identity-internals to confirm.');
        }
    });
  }
person sumit10    schedule 07.02.2014

Я тоже боролся с этим, но в конце концов обнаружил это решение, скрытое в примерах приложений Chrome. https://github.com/GoogleChrome/chrome-app-samples/blob/master/gapi-chrome-apps-lib/gapi-chrome-apps.js

removeCachedAuthToken удаляет его локально, но для отзыва токена с серверов Google необходимо отправить запрос, поэтому вторая часть: xhr.open('GET', 'https://accounts.google.com/o/oauth2/revoke?token=' + current_token);

Попробуй это:

function revokeToken() {

  chrome.identity.getAuthToken({ 'interactive': false },
  function(current_token) {
    if (!chrome.runtime.lastError) {

      // @corecode_begin removeAndRevokeAuthToken
      // @corecode_begin removeCachedAuthToken
      // Remove the local cached token
      chrome.identity.removeCachedAuthToken({ token: current_token },
        function() {});
      // @corecode_end removeCachedAuthToken

      // Make a request to revoke token in the server
      var xhr = new XMLHttpRequest();
      xhr.open('GET', 'https://accounts.google.com/o/oauth2/revoke?token=' +
               current_token);
      xhr.send();
      // @corecode_end removeAndRevokeAuthToken

      // Update the user interface accordingly

      $('#revoke').get(0).disabled = true; 
      console.log('Token revoked and removed from cache. '+
        'Check chrome://identity-internals to confirm.');
    }
  });
}
person Ohhh    schedule 06.05.2014