我在为游戏社区使用 Discourse,在那里解除 Steam 和 Discord 账号的关联毫无意义,只会引发问题。我该如何阻止用户解除账号关联?我知道 SAML 插件可以阻止此操作,但由于我使用 Discourse 来同步游戏内和 Discord 中的等级,我实在不希望用户自行解绑。如果有需要,我更希望手动进行解绑。
另外,从管理员侧来看,是否有可能显示 Steam64 ID 和 Discord ID?它们本身并不算机密信息,能够随时查看会非常有用。而且这些信息目前也未通过 API 暴露,而该 API 对我的使用场景来说限制较多。
您可以通过以下方式隐藏删除按钮。这样用户就无法禁用了?
.btn-danger, .json-schema-editor-modal .json-editor-btn-delete {
display: none;
}
这只能部分解决问题,但有人知道有没有办法让它变得不可能被这样做吗?从理论上讲,他们只需进入浏览器的“检查元素”功能,就能取消隐藏它。
编辑:经过一番研究后,我发现了这个:discourse/lib/auth/managed_authenticator.rb at main · discourse/discourse · GitHub
让我感兴趣的是“can revoke”(可撤销)部分,但我不太确定是否可以修改内置的 Discord 认证。有人知道这是否可行吗?
编辑 2:我尝试修改 Steam 的 Discourse 登录方式,但未成功(可能是因为我缺乏 Ruby 知识),以下是我的尝试:
# frozen_string_literal: true
# name: Steam authentication with Discourse
# about: Authenticate with Discourse with Steam
# version: 2.0.1
# author: J. de Faye, tgxworld
# omniauth-openid is not included in core since v2.4.0.beta10
unless defined? OmniAuth::Strategies::OpenID
gem 'ruby-openid', '2.9.2', require: false
gem 'rack-openid', '1.3.1', require: false
gem 'omniauth-openid', '1.0.1'
end
gem 'omniauth-steam', '1.0.6'
register_svg_icon "fab-steam" if respond_to?(:register_svg_icon)
def can_revoke?
false
end
register_asset 'stylesheets/steam-login.scss'
[
"../lib/auth/steam_authenticator.rb",
"../lib/validators/enable_steam_logins_validator.rb"
].each { |path| load File.expand_path(path, __FILE__) }
auth_provider authenticator: Auth::SteamAuthenticator.new, icon: 'fab-steam'
供参考,我修改的文件来自 这个 扩展插件。
编辑:我完全改错了插件的部分,但我已经能够完全禁用 Steam 的该功能。现在我需要弄清楚如何对 Discord 登录进行同样的操作,因为那是一个核心文件。