以太坊登录插件

这是一个 Discourse 插件,允许用户使用其以太坊钱包通过 Sign-In with Ethereum (SIWE) 标准进行身份验证。注入式钱包(如 MetaMask、Safe 等)开箱即用。如果配置了 RPC 端点,ENS 名称和头像将在服务器端进行解析。

要求

  • 一个自托管的 Discourse 论坛,或由支持第三方插件的提供商托管的论坛,例如 Communiteq

安装

访问容器的 app.yml 文件:

cd /var/discourse
nano containers/app.yml

将插件的代码仓库 URL 添加到 after_code 钩子中:

hooks:
  after_code:
    - exec:
      cd: $home/plugins
      cmd:
        - sudo -E -u discourse git clone https://github.com/discourse/docker_manager.git
        - sudo -E -u discourse git clone https://github.com/signinwithethereum/discourse-siwe-auth.git # <-- 已添加

请遵循 docker_manager.git 行的现有格式;如果该行不包含 sudo -E -u discourse,则使用 git clone https://github.com/signinwithethereum/discourse-siwe-auth.git

重建容器:

cd /var/discourse
./launcher rebuild app

配置

安装完成后,在 管理 > 插件 下找到该插件并确保已启用:

点击 设置 以配置插件:

在此处,您可以自定义登录声明,并可选择添加 WalletConnect / Reown 项目 ID。如果没有项目 ID,则仅支持注入式钱包(如 MetaMask、Safe 等)。

设置

设置 描述
Discourse siwe enabled 启用或禁用“使用以太坊登录”身份验证。
Siwe ethereum rpc url 可选。用于 ENS 名称/头像解析和 EIP-1271 签名验证(智能合约钱包如 SAFE 必需)的以太坊 JSON-RPC 端点。建议使用专用提供商(如 Alchemy、Infura)。示例:https://mainnet.infura.io/v3/YOUR_KEY
Siwe project ID 可选。WalletConnect / Reown 项目 ID。如果没有,则仅支持注入式钱包(如 MetaMask、Safe 等)。要启用 WalletConnect,请在 dashboard.reown.com 创建一个免费的项目 ID。
Siwe statement SIWE 消息中显示的可读声明。默认为“使用以太坊登录”。

工作原理

当用户点击以太坊登录按钮时,插件会打开一个专用的身份验证流程。用户连接其钱包,签署 SIWE 消息,然后通过服务器端的 OmniAuth 策略完成身份验证。

首次登录后,系统会提示用户将电子邮件地址与其账户关联。如果配置了 RPC URL 且连接的地址拥有 ENS 名称,则该名称将在服务器端解析并验证,并建议作为默认用户名。ENS 头像将通过 ENS 元数据服务获取,并用作个人资料照片。

或者,现有用户可以通过其个人资料设置连接其以太坊账户。

14 个赞

这里有一些关于依赖项的讨论 Discourse can't find gems specified in the plugin

在 GitHub 上找到了这个,似乎还在积极开发中。它似乎允许 web3 登录(登录钱包后仍需要电子邮件地址)。

然而,开发人员遇到了一个问题,该问题阻止了插件的安装和 Discourse 的后续引导。详细信息请参见下面的 issue。也许这是一个非常简单的问题,这里有人可以为开发人员提交一个 PR。

1 个赞

让我来试试 :wink:
解决方案在 Github issue 中。

3 个赞

太棒了,我现在就试试。希望这对开发者也有帮助 :grinning_face:

编辑:虽然看起来 gem 已经安装成功了,但我遇到了同样的错误:

version 2.3.0.
Successfully installed rubyzip-2.3.2
1 gem installed
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 777 exit 1>
Location of failure: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

请问您能这样做吗?

2 个赞

正在查看日志,发布我认为可能相关的内容。

@moderators 这个可以分一个主题吗?这个插件没有官方主题,我认为开发者也不在 meta 上。

I, [2022-07-04T16:43:46.394301 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Gem::ConflictError: 无法激活 eth-0.5.1,因为 openssl-3.0.0 与 openssl (~> 2.2) 冲突

我目前没有看到其他错误(或者我错过了,日志很长)。

1 个赞

老实说,我不太明白这里在说什么。:slightly_smiling_face: @RGJ@michaeld 有权限进行分割,所以也许他们会亲自来处理,并且比我更敏感地处理。:slightly_smiling_face::crossed_fingers: (或者,你也可以选择要分割的帖子,命名你想要它所属的类别,然后告诉我一个标题 :+1:

1 个赞

我的建议是从这里拆分:

https://meta.discourse.org/t/web-3-0-features/203321/19?u=marcp

最合适的类别将是 Support#plugins(我不确定……我们如何处理非 Meta 成员开发的插件?也许他会加入 Meta,或者有一天我们可以通过 GitHub 邀请他加入 Meta?)

编辑:

看起来这就是开发者,所以他在 Meta 上?@w4ll3

@michaeld 昨天为此提交了一个 PR,但尚未合并。在此期间,您可以使用 https://github.com/communiteq/discourse-siwe-auth/。

3 个赞

可以确认这有效!谢谢 Michael。

1 个赞

总结一下,您需要 before_code(如问题 Cannot Install Plugin on Self-Hosted Discourse server - rbsecp256k1 · Issue #15 · spruceid/discourse-siwe-auth · GitHub 中所述)和我的(目前未合并的)PR 的更新版本的 eth gem。

5 个赞

虽然在官方论坛上有点晚了,但大家好——我是 Spruce 团队的 Rocco。

再次感谢 @michaeld 提供的修复,问题解决了,我们这边也更新了文档。也感谢你提出这个问题——我们仍在积极开发/维护与 Sign-In with Ethereum 相关的内容。

我还想问一下——有没有可能最终将其变成一个官方支持的插件 :grinning: ——我们很喜欢 Discourse,并希望弄清楚如何将此功能扩展到非自托管的实例。

2 个赞

为了清楚起见,Communiteq 在我们的托管托管计划中确实支持此插件,它在 Professional 及更高版本中可用。

3 个赞

非常抱歉!

没必要道歉!官方托管还没有(或者说还没有?)。我只是想强调我们对这些 web3 插件的承诺。

3 个赞

很遗憾,这不是官方支持的插件。

但非常感谢 Communiteq 的支持!任何有助于支持 Web3 用户的事情都非常棒。

我们正在努力通过各种方式支持“使用以太坊登录”的普及,而 Discourse 一直是我们列表中的首位,这就是为什么在我们标准化它 EIP-4361 后,我们创建了这个插件。我们一直在考虑的另一件事是还能添加什么功能——自定义 RPC 提供商是其中最早的功能之一。

3 个赞

此插件对我不起作用,安装时出现问题,有人能分享替代方案或帮助解决这个问题吗?@michaeld @RGJ

如果您需要帮助,请分享详细信息。

1 个赞

@RGJ 当我尝试安装此插件时,重建因以下错误而失败

您正在 /var/www/discourse/plugins/discourse-siwe-auth/plugin.rb 中指定 gem rbsecp256k1,但它不存在!
查找位置:/var/www/discourse/plugins/discourse-siwe-auth/gems/2.7.6/specifications/rbsecp256k1-5.1.0.gemspec