Google Classroom Apps脚本-CourseWork.list权限错误

Joe*_*ite 2 google-api google-apps-script google-classroom

我正在尝试使用Classroom API v1在Google Apps脚本中从Google课堂访问课程作业。我按照快速入门中的步骤成功获取了我的课程列表,但是当我尝试使用以下方法访问我的一个课程中的课程时:

var coursework = Classroom.Courses.CourseWork.list('valid courseId');
Run Code Online (Sandbox Code Playgroud)

我收到“呼叫者没有权限”错误。不过,我可以使用API​​资源管理器成功检索课程列表。

通过使用API​​ Explorer,看起来该命令需要“ classroom.coursework.students.readonly”作用域。但是,当我在权限对话框中单击“允许”按钮时,该作用域不会添加到我的项目中。有没有一种方法可以将其添加到项目的范围列表中?我已经搜索过SO,并且看到过其他语言(例如python)中设置范围的提及,但是在Apps Script中却没有。我也看到有人提到手动授权范围在Apps脚本中,但没有说明如何执行此操作。

我已经碰壁了,所以如果有人有建议,我将非常感激。谢谢。

Sou*_*ria 6

最初由我在此SO线程上解决

此处适用于此任务的Classroom API参考。

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

您可以通过导航到“ 文件”>“项目属性”>“范围”来查看这些内容。

但是,当您从文档链接中的“ 凭据”>“ Google OAuth 2.0”标签下尝试API时,它将显示4个完全不同的OAuth范围;这些如下-

您需要在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"
],
Run Code Online (Sandbox Code Playgroud)

注意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"
}
Run Code Online (Sandbox Code Playgroud)

  • 无需手动添加这些缺失的范围。可以通过包含以下评论来强制提示适当的身份验证(受到@Tom Hinkle在[他的答案](/sf/answers/3222028841/)中的观察的启发):`// Classroom.Courses .CourseWork.create(courseId)` (2认同)

归档时间:

查看次数:

686 次

最近记录:

6 年 前