“呼叫者没有权限-google-apps-script”

问题描述 投票:1回答:1

我正在尝试使用google-apps-script创建google教室的扩展,但是我似乎遇到了权限问题-“呼叫者没有权限”。有人可以告诉我为什么会发生这种情况以及我需要做什么

我已尝试访问google cloud平台提供的所有库,希望其中之一提供所有必需的权限,但无济于事。

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.');
  }
}

该代码旨在列出特定课程中的课程ID

google-apps-script google-chrome-extension google-api permissions google-developers-console
1个回答
0
投票

此解决方案涉及做两件事-

  1. 更新清单文件(appsscript.json
  2. 更新Code.gs文件

任务1

更新清单文件(appsscript.json

此任务的适当的Classroom API参考是here

即使启用了[[Google高级服务...]后,您看起来也只会添加以下OAuth范围-

  • 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
  • 您可以通过导航到

    文件>项目属性>范围来查看它们。但是,当您从文档链接中的

    Credentials> Google OAuth 2.0

    标签下尝试API时,它将显示另外4个完全不同的OAuth范围;这些如下-

  • 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
  • 您需要在Apps脚本清单文件中手动添加所有这8种。为此,请导航至

    查看并选中显示清单文件。在那里,您需要添加此代码,也许在依赖项下面-"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问题。

    编辑说明:纠正的语法错误

  • © www.soinside.com 2019 - 2024. All rights reserved.