Ошибка при получении токена доступа: TypeError: Невозможно прочитать свойство 'project_id' из неопределенного - PullRequest
0 голосов
/ 05 февраля 2019

Я новичок в clasp.

После первоначального входа в систему через: clasp login Я могу войти в script.google.com Затем я создал проект и отправил файл через: clasp push

Теперь я вышел из системы, используя: clasp logout

Требуется помощь здесь: Теперь, если я пытаюсь:

clasp login --creds ./.clasp.json

Я получаю сообщение "Ошибка при получении токена доступа: Ошибка типа: Не удалось прочитать свойство 'project_id' из неопределенного".

Пожалуйста, сообщите мне, как войти в систему через --creds?

1 Ответ

0 голосов
/ 08 февраля 2019

TLDR: вы используете файл конфигурации (.clasp.json), а не файл учетных данных (creds.json или другой) из консоли Google Cloud Project.


При входе в системухранилище учетных данных по умолчанию находится в файле с именем .clasprc.json в каталоге ~ (C:\Users\<user>\ в Windows):

$ 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
 }

Локальная аутентификация хранит секрет клиента / etc и обычно требуется, если вы планируете использовать clasp run для выполненияфункция через API скриптов Google Apps.

// 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 - свойства token, oauth2ClientSettings и isLocalCreds -- хотя значение isLocalCreds будет иметь значение false для глобального входа.)

clasp.json формат:

{
  "scriptId": "",
  "rootDir": "build/",
  "projectId": "project-id-xxxxxxxxxxxxxxxxxxx",
  "fileExtension": "ts",
  "filePushOrder": ["file1.ts", "file2.ts"]
}

Обратите внимание, что clasp.json равно Конфигурацияфайлы сценариев и clasprc.json хранятся в учетные данные / авторизация пользователя . Ни один из них не является подходящим файлом учетных данных для локального входа в систему.

Устранение ошибки

Конкретная ошибка, которую вы получаете, связана с предоставлением неверного файла.Ваш предоставленный файл «учетных данных» не имеет требуемых свойств, и поэтому, когда clasp пытается прочитать из этого свойства

  console.log(LOG.CREDS_FROM_PROJECT(options.creds.installed.project_id));

, вы получите ошибку:

Ошибка при получении токена доступа: Ошибка типа: Невозможно прочитать свойство 'project_id' с неопределенным значением

Вы можете получить надлежащий файл учетных данных со страницы вашего облачного проекта Google Apps Script, например https://console.cloud.google.com/apis/credentials?authuser=0&project=<some project id>

Этот файл будет иметь формат:

{
    "installed":{
        "client_id":"<stuff>.apps.googleusercontent.com",
        "project_id":"<some project id>",
        "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":"<more stuff>",
        "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
    }
}

Если ваш файл учетных данных не имеет этого формата, вы не можете использовать его для локального входа в систему.

...