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

Я новичок в застежке.

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

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

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

clasp login --creds ./.clasp.json

Я получаю: «Ошибка при получении токена доступа: TypeError: невозможно прочитать свойство 'project_id' of undefined».

Пожалуйста, расскажите мне, как войти в систему с помощью --creds?


person Nishant Kansal    schedule 05.02.2019    source источник


Ответы (2)


TL; DR: вы используете файл конфигурации (.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
 }

Локальная аутентификация хранит секрет клиента / и т. Д. И обычно требуется, если вы планируете использовать 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 - свойства token, oauth2ClientSettings и _15 _ - хотя значение isLocalCreds будет ложным для глобального входа в систему.)

Формат 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));

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

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

Вы можете получить соответствующий файл учетных данных на странице проекта Google Cloud Project вашего проекта 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"]
    }
}

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

person tehhowch    schedule 08.02.2019
comment
Большое спасибо за подробное разъяснение. Обязательно попробую и вернусь. - person Nishant Kansal; 11.02.2019
comment
Я попробовал ваш способ и хорошо понял, как работает логин с помощью застежки. Я обнаружил, что когда мы вводим команду: clasp login, она сохраняет .clasprc в профиле пользователя. И, когда мы запускаем clasp logout, этот файл удаляется. Мое требование: есть ли способ войти в систему с помощью застежки в следующий раз, не переходя снова в пользовательский интерфейс или используя опцию creds? - person Nishant Kansal; 01.04.2019
comment
@nishant Я считаю, что clasp login всегда будет приводить к отображению экрана согласия OAuth, потому что вы также должны авторизовать clasp сам, а не только свое приложение Apps Script. Если вам просто нужно сменить пользователя, вам нужно будет написать свой собственный инструмент для управления местоположением / именем файла .clasprc. - person tehhowch; 01.04.2019
comment
Я выполнил шаги по созданию правильного файла учетных данных, как вам объяснили. {"web":{"client_id":"123456789-7fpnk0jhfvhe63h8s4jt1lgehj948s4o.apps.googleusercontent.com","project_id":"ABCD","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":"kcKK1aLan8TlDs0zXXssdsd","redirect_uris":["https://localhost/authorize"]}}. Однако ошибка остается прежней: Ошибка при получении токена доступа: TypeError: невозможно прочитать свойство project_id из undefined. - person Nishant Kansal; 18.04.2019
comment
Что ж, я могу сгенерировать правильный файл кредитов из GCP. Однако теперь он выдает Не удалось прочитать учетные данные API. Вы вошли в систему глобально? при этом: clasp login --creds creds-file. Пожалуйста помоги. - person Nishant Kansal; 18.04.2019
comment
Комментарии @Nishant не предназначены для того, чтобы задавать дополнительные вопросы. Просмотрите stackoverflow.com/help/someone-answers, а также stackoverflow.com/help/privileges/comment Для меня теперь у вас есть новый вопрос, который нужно исследовать и задать ему (ошибка совсем другая, и ваш метод ее воспроизведения не совсем ясен ). - person tehhowch; 18.04.2019

У меня также была эта ошибка, когда я неправильно выбрал веб-приложение для типа oauth вместо настольного приложения, в этом случае основным разделом является веб, а не установлен, и я получаю то же самое

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 и терпит неудачу.

person roma    schedule 26.12.2020