«Звонящий не имеет разрешения - google-apps-script» - PullRequest
3 голосов
/ 13 октября 2019

Я пытаюсь создать расширение для класса Google с помощью google-apps-script, но у меня, похоже, возникают проблемы с правами доступа - "вызывающий абонент не имеет разрешения". Может кто-нибудь сказать мне, почему это происходит и что мне нужно сделать

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

function listCourses() {
  var optionalArgs = {
    pageSize: 10
  };
  var response = Classroom.Courses.list(optionalArgs);
  var courses = response.courses;
  if (courses && courses.length > 0) {
    for (i = 0; i < courses.length; i++) {
      var course = courses[i];
      Logger.log('%s (%s)', course.name, course.id);
      var submissions = Classroom.Courses.CourseWork.list(course.id, optionalArgs);
      for (i = 0; i < submissions.length; i++) {
        var submission = submissions[i];
        Logger.log('%s', submission);
      }
    }
  } else {
    Logger.log('No courses found.');
  }
}

Код предназначен для перечисления идентификаторов курсов в определенном классе

1 Ответ

7 голосов
/ 14 октября 2019

Это решение включает в себя две вещи:

  1. Обновление файла манифеста (appsscript.json)
  2. Обновление файла Code.gs

Задача1

Обновление файла манифеста (appsscript.json)

Соответствующая ссылка Classroom API для этой задачи: здесь .

Похоже, даже после включения Расширенные службы Google ... , добавляются только следующие области действия OAuth -

Вы можете просмотреть их, перейдя к Файл> Свойства проекта> Области действия .

Однако, если вы попробуете API из ссылки на документацию, на вкладке Учетные данные> Google OAuth 2.0 , он показывает еще 4 совершенно разные области OAuth;это следующие параметры:

Вам необходимо добавить все 8 из них вручную в файл манифеста скрипта Apps. Для этого перейдите к Просмотр и проверьте Показать файл манифеста . Там вам нужно добавить этот код, возможно, ниже зависимости -

"oauthScopes": [
  "https://www.googleapis.com/auth/classroom.courses",
  "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
  "https://www.googleapis.com/auth/classroom.profile.emails",
  "https://www.googleapis.com/auth/classroom.profile.photos",
  "https://www.googleapis.com/auth/classroom.rosters",

  "https://www.googleapis.com/auth/classroom.coursework.me",
  "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
  "https://www.googleapis.com/auth/classroom.coursework.students",
  "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
],

Примечание 1. Только добавление более новой версии 4 не сработает, так как скрипт будет принимать только эти, а не исходные 5, которые былиавтоматически заполняется при первом запуске сценария.

Примечание 2. Пустая строка просто различает области, которые генерируются автоматически, и области, которые необходимо добавить вручную (избыточно).

Мой appsscript.json файл выглядит следующим образом;ваши могут отличаться -

{
  "timeZone": "Asia/Kolkata",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Classroom",
      "serviceId": "classroom",
      "version": "v1"
    }]
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/classroom.courses",
    "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
    "https://www.googleapis.com/auth/classroom.profile.emails",
    "https://www.googleapis.com/auth/classroom.profile.photos",
    "https://www.googleapis.com/auth/classroom.rosters",

    "https://www.googleapis.com/auth/classroom.coursework.me",
    "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
    "https://www.googleapis.com/auth/classroom.coursework.students",
    "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
  ],
  "exceptionLogging": "STACKDRIVER"
}

Задание 2

Обновление Code.gs файла

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

function listCourses() {
  var optionalArgs = {
    pageSize: 10
  };
  var response = Classroom.Courses.list(optionalArgs);
  var courses = response.courses;
  if (courses && courses.length > 0) {
    for (var i = 0; i < courses.length; i++) {
      var course = courses[i];
      Logger.log('%s (%s)', course.name, course.id);
      var submissions = Classroom.Courses.CourseWork.list(course.id, optionalArgs);
      for (var j = 0; j < submissions.courseWork.length; j++) {
        var submission = submissions.courseWork[j];
        Logger.log('%s', submission);
      }
    }
  } else {
    Logger.log('No courses found.');
  }
}

Надеюсь, это поможет :), но я на самом деле не знаю, почему этиобласти видимости не добавляются автоматически, возможно, для этого откроется проблема с Google.

Редактировать заметку: Исправленные грамматические ошибки

...