Javascript 在接收访问令牌之前需要运行getAuthToken两次,为什么?

Javascript 在接收访问令牌之前需要运行getAuthToken两次,为什么?,javascript,google-chrome-extension,oauth-2.0,google-oauth,Javascript,Google Chrome Extension,Oauth 2.0,Google Oauth,我想我需要吃点阿司匹林。。。把我的头撞到墙上。。。三天了,还是一事无成。。。我就是不明白 通过Chrome扩展,我从background.js调用getAuthToken,它可能是有史以来编写的最基本的脚本: function getAuthToken(){ chrome.identity.getAuthToken( {'interactive': true}, function(token){

我想我需要吃点阿司匹林。。。把我的头撞到墙上。。。三天了,还是一事无成。。。我就是不明白

通过Chrome扩展,我从background.js调用getAuthToken,它可能是有史以来编写的最基本的脚本:

function getAuthToken(){            
        chrome.identity.getAuthToken(   
        {'interactive': true},
            function(token){                            
                console.log(token);         
            } 
        );     
};
清单片段:

"content_security_policy": "script-src https://*.google.com 'unsafe-eval'; object-src 'self'",
  "oauth2": {
    "client_id": "<client_id>.apps.googleusercontent.com",
    "scopes": ["https://www.googleapis.com/auth/gmail.modify"]
  } 
“内容安全策略”:“脚本src https://*.google.com'safe eval';对象src'self',
“oauth2”:{
“客户端id”:“.apps.googleusercontent.com”,
“范围”:[“https://www.googleapis.com/auth/gmail.modify"]
} 
情况就是这样:

  • 加载扩展名
  • OAuth2启动后,请求(弹出)并授予对GMail的访问权限
  • 控制台日志:令牌=未定义且未检查的runtime.lastError 正在运行identity.getAuthToken:无法创建授权页 已加载(上次错误133)
  • 在Chrome tokencache中,我看到一个新的但不存在的令牌(没有令牌字符串)
  • 重新加载扩展名
  • 不要求访问Gmail
  • 令牌现在已正确接收
  • 为什么我需要运行getAuthToken两次?我对GMail使用第二步身份验证,但我知道这只适用于前端


    如果您遇到类似的问题,请与我分享,没有超过5行的代码太令人沮丧了。

    您如何在后台调用getAuthToken()?它是在jquery$(document).background.js中的ready函数上调用的,但我也尝试立即调用它,结果相同。为了测试,我禁用了步骤2验证,但问题仍然存在。一旦令牌缓存中有一个空的或过期的令牌,它就可以正常工作,只有在我必须访问GMail时才会出现。谢谢你的反馈。好的,我也试过这个例子,在这里它第一次加载失败,第二次加载后它得到了令牌。这可能是因为该扩展尚未发布,而是在本地运行的吗?我在另一台网络上的另一台计算机上尝试了整个过程,但问题并没有出现。第一次呼叫,收到令牌。问题发生在服务器2012R2上,工作的是Windows 7。很明显,我尝试过禁用防火墙(Sophos UTM)和病毒扫描程序(ESET),但没有成功。有什么想法吗?不确定是否有必要,但值得尝试将google URL添加到清单中的权限请求中(然后重新加载扩展以确保其生效):
    “https://www.googleapis.com/", "https://accounts.google.com/“,”https://*.googleusercontent.com/“