"The caller does not have permission - google-apps-script"
"The caller does not have permission - google-apps-script"
我正在尝试使用 google-apps-script 创建 google classroom 的扩展,但我似乎 运行 遇到权限问题- "the caller does not have permission"。谁能告诉我为什么会这样以及我需要做什么
我已经尝试访问 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 class
这个解决方案涉及做两件事 -
- 正在更新清单文件(
appsscript.json
)
- 正在更新
Code.gs
文件
任务 1
正在更新清单文件(appsscript.json
)
此任务的适当课堂 API 参考是 here。
看起来甚至在启用 高级 Google 服务之后...,您只会添加以下 OAuth 范围 -
- 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
您可以通过导航到 文件 > 项目属性 > 范围.
查看这些
但是,当您尝试文档 link 中的 API 时,在 Credentials > Google OAuth 2.0 选项卡下,它显示还有 4 个完全不同的 OAuth 范围;这些如下 -
- 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
您需要在 Apps 脚本清单文件中手动添加所有这 8 个。为此,请导航至 View 并选中 Show manifest file。您需要在此处添加此代码,可能在 dependencies -
下面
"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"
],
Note1: Only adding the newer 4 will not do the trick as the script would assume only these and not the original 5 that were auto-populated when your script ran for the first time.
Note2: The blank line is simply to differentiate between the scopes that get generated automatically vs. the ones you need to add manually (its redundant).
我的 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 为它打开一个问题。
编辑备注:更正语法错误
我正在尝试使用 google-apps-script 创建 google classroom 的扩展,但我似乎 运行 遇到权限问题- "the caller does not have permission"。谁能告诉我为什么会这样以及我需要做什么
我已经尝试访问 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 class
这个解决方案涉及做两件事 -
- 正在更新清单文件(
appsscript.json
) - 正在更新
Code.gs
文件
任务 1
正在更新清单文件(appsscript.json
)
此任务的适当课堂 API 参考是 here。
看起来甚至在启用 高级 Google 服务之后...,您只会添加以下 OAuth 范围 -
- 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
您可以通过导航到 文件 > 项目属性 > 范围.
查看这些但是,当您尝试文档 link 中的 API 时,在 Credentials > Google OAuth 2.0 选项卡下,它显示还有 4 个完全不同的 OAuth 范围;这些如下 -
- 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
您需要在 Apps 脚本清单文件中手动添加所有这 8 个。为此,请导航至 View 并选中 Show manifest file。您需要在此处添加此代码,可能在 dependencies -
下面"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"
],
Note1: Only adding the newer 4 will not do the trick as the script would assume only these and not the original 5 that were auto-populated when your script ran for the first time.
Note2: The blank line is simply to differentiate between the scopes that get generated automatically vs. the ones you need to add manually (its redundant).
我的 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 为它打开一个问题。
编辑备注:更正语法错误