在新标签页中加载Gmail API,无需重新授权Chrome扩展程序

时间:2017-09-27 14:57:05

标签: javascript google-chrome-extension gmail-api

我尝试以下方法尝试检查用户是否已获得授权,但我不太了解,我认为我检查错误。

Background.js

var SCOPE = ['https://www.googleapis.com/auth/gmail.readonly'];

function tryAuth() {
    chrome.cookies.get({url:'https://accounts.google.com', name:'LSID'}, function(cookie) {
        var clientId = "xxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
        if (cookie) {
            gapi.client.init('gmail', 'v1',{
                client_id: clientId,
                scope: SCOPE,
                immediate: 'false'
            });

        }else{
            console.log("trying oauth");
            var configString = {
                client_id: clientId,
                scope: SCOPE,
                immediate: 'false'
            };

           return gapi.auth.authorize(configString, handleAuthResult);
        }
    });
}

function handleAuthResult(authResult) {
    console.log("AUTH RESULT!!");
    console.log(authResult);
    if (authResult && !authResult.error) {
        var access_token = authResult.access_token;
        gapi.client.load('gmail', 'v1', gmailAPILoaded);
    }
}

然而,这个工作正常,但每次刷新一个页面或打开一个新标签时它都会重新授权,我会弹出一个弹出窗口并在循环中关闭(我假设它& #39; s迭代我打开的每个标签?):

function tryAuth() {
    var clientId = "xxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
    console.log("trying oauth");
        var configString = {
            client_id: clientId,
            scope: SCOPE,
            immediate: 'false'
        };
    return gapi.auth.authorize(configString, handleAuthResult);
}

我还在清单中使用"matches":"<all_urls>",我知道这是一个因素,因为我可以指定网址,并且只会弹出一次弹出窗口进行授权。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

我使用我的第一个例子改变了immediate: "true",现在一切都是  工作