检索访问令牌时出错:TypeError:无法读取未定义的属性'project_id'

时间:2019-02-05 11:27:38

标签: clasp

我是新手。

在通过以下方式首次登录后: 扣登录 我能够登录到script.google.com 接下来,我创建了一个项目,并通过以下方式推送了文件: 扣住

现在,我已使用以下方式登出: 退出系统

此处需要帮助:现在,如果我正在尝试:

clasp登录--creds ./。clasp.json

我正在获取“检索访问令牌时出错:TypeError:无法读取未定义的属性'project_id'”。

请指导我如何通过--creds登录?

2 个答案:

答案 0 :(得分:1)

TLDR:您正在使用配置文件(.clasp.json),而不是Google Cloud Project控制台中的凭据文件(creds.json或其他)。


登录时,凭据的默认存储位于.clasprc.json目录(在Windows中为~)的名为 C:\Users\<user>\ 的文件中:

$ clasp login
Logging in globally...
 Authorize clasp by visiting this url:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&.....

Authorization successful.

Default credentials saved to ~\.clasprc.json (C:\Users\<user>\.clasprc.json).

请注意,此文件( .clasprc.json )与 .clasp.json 不同。

clasprc.json格式:

据说该文件的内容取决于身份验证类型,全局或本地:

// GLOBAL: clasp login will store this (~/.clasprc.json):
 {
   "access_token": "XXX",
   "refresh_token": "1/k4rt_hgxbeGdaRag2TSVgnXgUrWcXwerPpvlzGG1peHVfzI58EZH0P25c7ykiRYd",
   "scope": "https://www.googleapis.com/auth/script.projects https://www.googleapis.com/auth/script ...",
   "token_type": "Bearer",
   "expiry_date": 1539130731398
 }

本地身份验证存储客户端密钥/等,如果您打算使用clasp run通过Google Apps Script API执行功能,通常需要使用本地身份验证。

// LOCAL: clasp login will store this (./.clasprc.json):
 {
   "token": {
     // as above
   },
   // Settings
   "oauth2ClientSettings": {
     "clientId": "807925367021-infvb16rd7lasqi22q2npeahkeodfrq5.apps.googleusercontent.com",
     "clientSecret": "9dbdeOCRHUyriewCoDrLHtPg",
     "redirectUri": "http://localhost"
   },
   "isLocalCreds": true
}

(实际上,两个文件的格式均为LOCAL文件的格式,即属性tokenoauth2ClientSettingsisLocalCreds,尽管{{ 1}}对于全局登录名将为false。)

clasp.json格式:

isLocalCreds

请注意,{ "scriptId": "", "rootDir": "build/", "projectId": "project-id-xxxxxxxxxxxxxxxxxxx", "fileExtension": "ts", "filePushOrder": ["file1.ts", "file2.ts"] } 脚本文件的配置clasp.json已存储 用户的凭证/授权 >。 两者都不是用于本地登录的适当凭据文件。

解决错误

您得到的特定错误是由于您提供了不正确的文件而导致的。您提供的“凭据”文件不具有必需的属性,因此,当扣环尝试进行read from that property

时,
clasprc.json

您收到错误:

  

检索访问令牌时出错:TypeError:无法读取未定义的属性'project_id'

您可以从Apps脚本项目的Google Cloud Project页面(即 console.log(LOG.CREDS_FROM_PROJECT(options.creds.installed.project_id));

)中获取适当的凭据文件。

此文件的格式为:

https://console.cloud.google.com/apis/credentials?authuser=0&project=<some project id>

如果您的凭据文件没有这种格式,则不能使用它来本地登录。

答案 1 :(得分:0)

我也遇到了这个错误,当我错误地为 oauth 类型选择了“Web 应用程序”而不是“桌面应用程序”时,在这种情况下,主要部分是“网络”,而不是“已安装”,我收到了相同的信息

>
Error retrieving access token: TypeError: Cannot read property 'project_id' of undefined

错误的 oauth 客户端看起来像

{
    "web": {
        "client_id": "<STUFF>",
        "project_id": "<STUFF>",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_secret": "<STUFF>"
    }
}

虽然正确

{
    "installed": {
        "client_id": "<STUFF>",
        "project_id": "<STUFF>",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_secret": "<STUFF>",
        "redirect_uris": [
            "urn:ietf:wg:oauth:2.0:oob",
            "http://localhost"
        ]
    }
}

脚本尝试解析“installed.project_id”变量并失败。