[英]“The caller does not have permission - google-apps-script”
我正在尝试使用 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.');
}
}
该代码旨在列出特定 class 中课程的课程 ID
该解决方案涉及做两件事 -
appsscript.json
)Code.gs
文件appsscript.json
)此任务的相应教室 API 参考在这里。
看起来即使在启用高级 Google 服务之后... ,您也只会添加以下 OAuth 范围 -
您可以通过导航到File > Project properties > Scopes来查看这些内容。
但是,当您从文档链接尝试 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 提出问题。
编辑说明:纠正语法错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.