我是在这里疯了,还是用户输入的签名图片 URL 根本没有验证?
基本上,用户可以输入任何他们想要的东西,然后会被推送到其他用户?
另外,为什么 URL 签名数据库大小设置为 32_000?
谁需要 32000 个字符的图片 URL?
太诡异了 
我修改了 CSS,硬编码了最大高度和宽度;
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
我在 plugin.rb 中将签名 URL 的最大大小更改为 250
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
我将此添加到 plugin.rb 中“on(:user_updated) do |user|”的底部(我不会使用高级模式)
# 如果不在高级模式下,则验证 URL
if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
url = user.custom_fields["signature_url"]
# 严格验证:仅限 HTTPS,仅限某些图片文件类型
unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=&]+)?\z/
Rails.logger.warn("[discourse-signatures] Rejected invalid signature_url for user #{user.id}: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
如果我在这里做错了什么(以前从未接触过 Discourse),请纠正我并告诉我正确的方法。
1 个赞
RGJ
(Richard - Communiteq)
188
因为 250 不够……
这就是签名的全部意义所在。论坛也是一样,人们输入内容,其他人就能看到。真是疯狂的世界,不是吗?
5 个赞
当 Discourse 升级到 3.5.0.beta8 时(3.5.0.beta9-dev 也有问题),发现用户编辑签名后无法保存(尽管显示已保存但无效),在 3.5.0.beta7 上仍然正常。希望尽快修复,因为许多插件从 beta7 到 beta8 都已内置。
2 个赞
tknospdr
(David Muszynski)
192
我们有一个关于签名的特定用例,我想知道进行一些更改是否相对容易。
- 我同意我希望在用户界面中只看到特定组的签名,我对 CSS 不太了解。
- 我们将 Discourse 同时用作社区和支持票务系统。是否可以设置一个选项来“仅在 X 类别中显示签名”?
我们实际上只需要在支持部分显示签名,因为我们的大部分互动都是通过电子邮件进行的。
3 个赞
tobiaseigen
(Tobias Eigen)
拆分了此话题
193
我相信您可以使用这个:
您可以右键单击 > 检查以获取元素的 ID/类,然后使用 display:none 来隐藏它。恐怕我现在在手机上,所以无法检查类/ID
。
它不#included-in-core,所以你需要单独安装它。
long
202
谢谢。我太不擅长弄清楚这些东西了。完全不知道我该怎么做。应该有个设置。那样会简单得多。不明白为什么任何群组会想允许所有人使用签名。还希望有个选项可以隐藏“启用签名 - 在帖子下方查看用户签名”这个设置。
还应该有一个选项来限制文本签名的字符数,并限制横幅签名的图片大小。
要是懂 CSS 就好了哈哈
long
203
好的,对于那些希望真正改善其群组签名的用户(特别是如果您想使用将签名作为付费升级/订阅一部分的选项),这里有一些我认为效果好得多的代码(以及背后的原因),可以帮助您推动更多升级。我尝试了很多次,但它奏效了。请注意您需要替换“XXXXX”部分的位置。
我希望实现以下 2 件事:
A) 我想禁用不查看签名的功能。这意味着那些进行升级的用户知道他们的签名将被所有人看到。
B) 我希望只有特定群组才能创建签名。
-
转到 管理员 > 外观 > 主题和组件 > 组件 > 安装 > 创建新的
-
将此代码添加到 <head> 选项卡:
<script>
// 等待基本页面结构首先加载
document.addEventListener("DOMContentLoaded", function() {
// 设置观察者
const observer = new MutationObserver(function(mutations) {
// 查找页面上的所有控件标签
const labels = document.querySelectorAll('label.control-label');
labels.forEach(label => {
// 查找特定的“签名”标签
if (label.textContent.trim() === 'Enable Signatures') {
// 查找包含标签和复选框的主容器并将其隐藏
const controlGroup = label.closest('.control-group') || label.parentElement;
if (controlGroup) {
controlGroup.style.display = 'none';
}
}
});
});
// 现在开始观察 body,因为我们知道它存在
observer.observe(document.body, { childList: true, subtree: true });
});
</script>
3. 将此代码添加到 css 选项卡(将 XXXXX 替换为您的群组名称):
/* 隐藏所有人的签名部分 */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* 仅当 body 上存在 'user-is-XXXXX' 类时才显示它 */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
- 将此代码添加到第一个代码块下方的
<head> 标签中(将 XXXXX 替换为您的群组名称):
<script>
(function() {
const checkAccess = () => {
// Discourse 将当前用户的群组存储在这个全局对象中
const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
if (user && user.groups) {
// 检查是否有任何群组名称与“XXXXX”匹配
const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
if (isXXXXX) {
document.body.classList.add('user-is-XXXXX');
}
}
};
// 立即运行
checkAccess();
// 在用户在页面之间导航时运行
document.addEventListener('discourse-ready', checkAccess);
// 备份:在 1 秒后再次运行以捕获加载缓慢的情况
setTimeout(checkAccess, 1000);
})();
</script>
- 将此代码添加到第一个代码块下方的 css 选项卡中(将 XXXXX 替换为您的群组名称):
/* 隐藏所有人的签名部分 */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* 仅当 body 上存在 'user-is-XXXXX' 类时才显示它 */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
完成。
我不是开发人员。我所知道的就是它在我的网站上 100% 有效。
另外,对于插件作者——非常希望能够限制签名字符数。我尝试了很多方法,但都没有奏效。
1 个赞
Falco
(Falco)
204
我在一个分支中添加了最受请求的功能到插件中
如果你们可以试用这个分支并提供反馈,我下周就可以合并它。
3 个赞
long
206
我们如何测试这个?抱歉问了个新手问题。我更喜欢这个而不是我上面想出来的方案。另外,是否有可能添加一个选项来关闭图片签名,只允许基于文本的签名?谢谢!
嗨,Long!您是在自托管您的 Discourse 站点吗?如果是,您可以使用第一篇帖子中链接的说明来安装插件。
我个人建议等到 Falco 的分支定稿并合并后再安装。
long
208
是的,自托管。我已经安装了插件。一旦该分支最终确定并合并,它会自动更新吗?谢谢!
1 个赞
Falco
(Falco)
209
您将 app.yml 中的插件行更改为如下所示
- sudo -E -u discourse git clone -b feature/group-category-restrictions git@github.com:discourse/discourse-signatures.git
long
211
这可能是一个愚蠢的问题,但是当更新合并后,插件会自动更新,我们会在设置中看到新选项吗?