- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以限制 Web 应用程序的使用,但我不能限制对 标记中引用的图像的访问。
现在我正在使用 Google Apps 脚本开发网络应用程序。这是公司的内部应用程序,我必须仔细设置 Assets 的访问权限。
对于应用程序本身,从脚本编辑器的部署为网络应用程序框,我将执行应用程序设置为我(bar@foo.example.com ) 和有权访问该应用程序的人作为FOO 公司内的任何人。
(假设我属于 FOO 公司。我的 Google 帐户是 bar@foo.example.com)
现在,当我使用FOO的谷歌账号登录时,我可以成功访问Web App。但是当我没有登录时,我无法访问它。这就是我想要的。
但是当我设置 标签以在 Google Drive 中显示 jpeg 文件时,我必须将图像文件的 Share 设置为 Internet 上知道此链接的任何人都可以查看。
当我在 Web App 项目的 HTML 中设置 标签并将 jpeg 文件的 Share 设置为 FOO Corporation -- 该组中的任何人都可以通过此链接查看, 标签将不起作用(将返回错误 403)。
我想限制图像的访问权限以及网络应用程序。我该怎么做?
如何重现
放jpeg文件
index.html
文件并添加代码:<html>
<head>
<base target="_top">
</head>
<body>
<img src="https://drive.google.com/uc?id=xxxx_object ID_xxxx" width="30" height="30" alt="error alt text">
</body>
</html>
创建 Code.gs
function doGet() { return HtmlService.createHtmlOutputFromFile('index'); }
将其发布为 Web App
结果——错误
Google (logo) 403. That’s an error. We're sorry, but you do not have access to this page. That’s all we know.
修改图片文件的访问权限
我想做什么?
我想限制图片的访问权限以及Web应用程序(只有FOO公司的用户才能访问)。我该怎么做?
最佳答案
403 禁止访问
/uc
端点,当文件权限设置为“在此组中”时,即使您已登录 G Suite 帐户,也会返回 403 Forbidden
响应.
解决方法
您可以实现动态附加 HTMLImageElement
的流程,其中 src
属性设置为图像数据(来自字节的 base-64 编码字符串)。有了这个,您可以限制对 Web 应用程序和图像的访问,但仍然能够加载它。
部署 Web App 时,确保部署对文件有足够的访问权限,例如,当文件具有“拥有此链接的该组中的任何人都可以查看”权限时:
Execute the app as: Me
Who has access to the app: Anyone within [org]
下面是一个小的概念证明,包括一个服务器端实用程序和一个示例 HTML 文件。
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
const asyncGAPIv2 = ({
funcName,
onFailure = console.error,
onSuccess,
params = []
}) => {
return new Promise((res, rej) => {
google.script.run
.withSuccessHandler(data => {
typeof onSuccess === "function" && onSuccess(data);
res(data);
})
.withFailureHandler(error => {
typeof onFailure === "function" && onFailure(error);
rej(error);
})
[funcName].apply(null, params);
});
};
const fetchAndAppendImage = async ({ parent = document.body, id }) => {
const data = await asyncGAPIv2({
funcName: "getImageFromDrive",
params: [{ id, token }]
});
const img = document.createElement("img");
img.src = data;
parent.append(img);
};
(async () => await fetchAndAppendImage({ id: "id here" }))();
</script>
</body>
</html>
您可以将 id 传递给服务器端实用程序,使用 getFileById
获取文件( native 身份验证流程将确保请求者无法访问他们无权访问的文件),并通过执行以下操作形成图像数据字符串:
getBlob
从 File
实例中提取原始字节至 getBytes
.base64Encode
Utilities
服务的方法,用于将字节转换为 base-64 编码字符串并添加 data:image/png;base64,
(Data URL 方案)。如果您的图像具有其他 MIME 类型,请相应地进行修改。/**
* @summary gets an image from Google Drive
*
* @param {{
* id : string
* }}
*
* @returns {string}
*/
const getImageFromDrive = ({ id }) => {
try {
const file = DriveApp.getFileById(id);
const bytes = file.getBlob().getBytes();
const data = `data:image/png;base64,${Utilities.base64Encode(bytes)}`;
return data;
} catch (error) {
console.warn(error);
return "";
}
};
注意事项
/uc
端点访问具有“在该组中”权限的文件,而 仅 登录 G Suite 帐户没有授权问题。关于google-apps-script - 如何将 Web 应用程序中 <img> 标记中使用的图像限制为 "anyone within corporation"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63444965/
我知道 source 和 . 做同样的事情,如果标题中的其他命令对不一样,我会感到惊讶事情(因为我正在运行 bash 作为我的 shell,$SHELL [script] 和 bash [script
我在尝试启动第一个 super 账本网络时遇到此错误: $ ./byfn.sh -m up Starting with channel 'mychannel' and CLI timeout of '
哪个更好用或者更方便: ... 或 ... 最佳答案 你真的需要类型属性吗?如果您使用的是 HTML5,则不会。否则,是的。 HTML 4.01 和 XHTML 1.0 指定了 type属性是必需的,
哪个更好用或者更方便: ... 或 ... 最佳答案 你真的需要类型属性吗?如果您使用的是 HTML5,则不会。否则,是的。 HTML 4.01 和 XHTML 1.0 指定了 type属性是必需的,
使用此语法包含外部 javascript 文件的正确术语是什么: 是否包含script.js?执行了吗?是链接的吗?是叫吗?我刚刚运行了该文件吗? 最佳答案 我认为这里最常见的术语是加载外部 Jav
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why don't self-closing script tags work? 我刚刚发现 HTML 中的
没什么可说的了。我尝试寻找这意味着什么,但找不到。该脚本几个月来一直运行良好,并在 12 小时前停止,没有对其进行任何更改。手动运行显示此错误。 最佳答案 我遇到了同样的问题,我只需从脚本编辑器中单击
我是 Apps 脚本的新手,正在尝试了解使用另一个帐户在一个帐户中运行/触发脚本的基础知识。需要注意的是:我想在访问脚本的用户而不是拥有脚本的用户的情况下运行脚本——以便将运行时间分配给访问的用户。
我是 Apps 脚本的新手,正在尝试了解使用另一个帐户在一个帐户中运行/触发脚本的基础知识。需要注意的是:我想在访问脚本的用户而不是拥有脚本的用户的情况下运行脚本——以便将运行时间分配给访问的用户。
我最近遇到这个问题,我试图在我的 HTML 页面中导入多个 js 文件,如下 - 但我面临的问题是,它只加载第一个 js 文件,而其余的 js 文件没有加载。我还检查了浏览器中的网络部分,剩下的
Duplicate Why don’t self-closing script tags work? 我正在编写一个 ASP.net 页面,它在 JS 文件中有一些用于客户端身份验证的 Javascr
为什么以下行在许多浏览器(mozilla、IE)中不起作用? 为什么一定要这样设置? 最近我将我的项目从 XHTML 转换为 HTML5,我遇到了一些小但令人不安的不兼容性。 最佳答案 虽然脚本元
这个问题已经有答案了: Why don't self-closing script elements work? (12 个回答) 已关闭 7 年前。 经过两天的 Angular 与 Webpack
我在任何地方都找不到这个问题的答案;甚至在官方文档中也没有。我已经尝试自己编写代码,但它不起作用,所以它可能无法实现。 在下面的示例中,您可以使用条件颜色进行绘图: //STACKED EMAs
我正在通过串行端口使用 Tera Term 在板上进行一些测试。最近我发现我可以在 Tera Term 中编写一些脚本,所以我一直在做研究以帮助自动化并使测试更容易一些。 我知道 Tera Term
数组在 PineScript 中不可用。 有解决办法吗?有没有人开发过代码,作为数组使用? 我需要它做什么?我想计算每条趋势线或 S/R 水平的触及次数。 最佳答案 要实现计数器,您可以创建一个变量,
有没有办法创建一个指标来反射(reflect) Pine Script 中股票的当前价格?我需要这个指标,因为我需要在蜡烛关闭之前输入订单(当有特定的交叉时)并且回测数据是逐条提供的。我认为一个指标可
我的网站有一个脚本,如果从移动设备查看页面,格式和样式会发生变化。在网站的 2/3 页上,该脚本效果很好,正如我想要的那样。但是在最后一个上,用于更改格式和样式的脚本运行但未完全运行。我已经尝试从我的
我是否正确,市场上没有直接替代此流程: 在 chrome 插件商店中发布未列出 直接将链接分享给可以使用脚本的人 特别是,这些机制允许我使用我在所有 google dsoc 上编写的脚本。 随着转向市
我有一个简单的 Google Script 发布为具有匿名访问权限的网络应用程序。代码可用 here网络应用程序可用 here . code.gs function doGet() { retur
我是一名优秀的程序员,十分优秀!