我正在尝试使用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.');
}
}
该代码旨在列出特定班级课程的课程ID
答案 0 :(得分:7)
此解决方案涉及两件事-
appsscript.json
)Code.gs
文件appsscript.json
)适合该任务的Classroom API参考是here。
即使启用了高级Google服务... ,您看起来也只会添加以下OAuth范围-
您可以通过导航到文件>项目属性>范围来查看这些内容。
但是,当您通过文档链接尝试使用API时,在 Credentials> Google OAuth 2.0 标签下,它将显示另外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"
],
注意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"
}
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带来麻烦。
编辑说明:纠正的语法错误