Refre sh getAuthToken - PullRequest
       1

Refre sh getAuthToken

0 голосов
/ 29 апреля 2020

Мне нужно обновить sh getAuthToken после его истечения. Я помещаю вызов getAuthToken в фоновый режим. js и сохраняю переменную в хранилище, чтобы скрипт содержимого мог ее получить. Все идет нормально. Когда токен правильно истекает, я получаю код 401 из API Google Drive, затем отправляю сообщение из скрипта контента в фоновый режим. js, чтобы использовать removeCachedAuthToken, а затем повторяю вызов getAuthToken, и я go вернуться к токену в хранилище. Все это работает, пользователь перезагружает страницу, сохраняя расширение открытым, чтобы передать сообщение из скрипта контента в фоновый режим. js и перезагрузка скрипта контента снова получает токен, чтобы сделать вызовы API google drive.

Можно ли хотя бы обновить sh страницу, а не только две?

Манифест. js

{
    "name": "Project",
    "version": "1.0",
    "manifest_version": 2,

    "description": "Project",

    "icons": {
        "128": "img/path_128.png",
        "64": "img/path_64.png",
        "32": "img/path_32.png"
    },

    "browser_action": {
        "default_title": "Project"
    },
    "browser_action": {
        "default_title": "Project",
        "default_popup": "popup.html"
    },

    "oauth2": {
        "client_id": "******.apps.googleusercontent.com",
        "scopes":["https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive","https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive.metadata"]
    },

    "permissions": [
        "storage",
        "identity"
    ],

    "content_scripts": [
       {
         "css": ["css/google-docs.css"],
         "js": ["js/jquery-3.5.0.min.js", "js/google-docs.js"]

       }
     ],

    "content_security_policy": "script-src https://code.jquery.com https://apis.google.com 'self'; object-src 'self'"
}

Фон. js

chrome.identity.getAuthToken({interactive: true}, function(token) {
                /*chrome.storage.local.set({token: token}, function() {

                });*/
                console.log(token);
                chrome.storage.local.set({'token': token}, function() {
                  // Notify that we saved.
                  console.log('Settings saved');
                });
            });
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
        console.log(request.greeting);
        if (request.greeting == "401"){
            chrome.storage.local.get('token', function(data) {
                var token = data.token;
                chrome.identity.removeCachedAuthToken({token: token}, function (){
                  alert('removed');
                    chrome.identity.getAuthToken({interactive: false}, function(token) {
                        console.log(token);
                        chrome.storage.local.set({'token': token}, function() {
                          // Notify that we saved.
                          console.log('Settings saved');
                          sendResponse({farewell: "success"});
                        });
                    });
                });
            });
        }

});

Содержание. js (google-docs. js)

chrome.storage.local.get('token', function(data) {
        var token = data.token;
        console.log(token);
        AjaxCall(token);

});

// error code ajax function
            error: function (jqXHR, textStatus, errorThrown) {
                console.log('Error: ' + errorThrown + ' / ' + textStatus) + console.log(jqXHR);
                a = true;
                if(jqXHR.responseJSON.error.code){
                    token = refreshAuthTokenCall();
                }

            }

function refreshAuthTokenCall(){

    chrome.runtime.sendMessage({greeting: "401"}, function(response) {
        console.log(response.farewell);
        if(response.farewell == "success"){
            chrome.storage.local.get('token', function(data) {
                var token = data.token;
                console.log(token);
                AjaxCall(token);
            });
        }
    });
}

1 Ответ

0 голосов
/ 09 мая 2020

К сожалению chrome.identity не возвращает токен refre sh, поэтому пользователю потребуется go через поток согласия пользователя после истечения срока действия токена доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...