Ethereum でのサインイン用プラグイン

:information_source: 概要 Discourse で Ethereum を用いたサインインを有効化
:hammer_and_wrench: リポジトリ GitHub - signinwithethereum/discourse-siwe-auth: Discourse plugin for SIWE authentication · GitHub
:open_book: インストールガイド Discourse でのプラグインのインストール方法

ユーザーが Sign-In with Ethereum (SIWE) 標準を使用して Ethereum ウォレットで認証できる Discourse プラグインです。注入型ウォレット(MetaMask、Safe など)はそのまま使用可能です。RPC エンドポイントが設定されている場合、ENS 名とアバターはサーバー側で解決されます。

要件

  • 自己ホストされているか、Communiteq のようなサードパーティ製プラグインをサポートするプロバイダーでホストされている Discourse フォーラム。

インストール

コンテナの 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 Ethereum を用いた認証の有効化または無効化。
Siwe ethereum rpc url オプション。 ENS 名/アバターの解決および EIP-1271 署名検証(SAFE などのスマートコントラクトウォレットに必要)に使用される Ethereum 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 メッセージに表示される人間が読みやすい文言。デフォルトは “Sign in with Ethereum” です。

仕組み

ユーザーが Ethereum ログインボタンをクリックすると、プラグインは専用の認証画面を開きます。ユーザーはウォレットを接続し、SIWE メッセージに署名し、サーバー側で OmniAuth 戦略を通じて認証されます。

初回サインイン後、ユーザーはアカウントにメールアドレスを関連付けるよう求められます。RPC URL が設定されており、接続されたアドレスに ENS 名がある場合、その名前はサーバー側で解決・検証され、デフォルトのユーザー名として提案されます。ENS アバターは ENS メタデータサービスを通じて取得され、プロフィール写真として使用されます。

または、既存のユーザーはプロフィール設定から Ethereum アカウントを接続することもできます。

「いいね!」 14

ここに依存関係に関する議論があります Discourse can't find gems specified in the plugin

GitHubで見つけました。活発に開発されているようです。Web3ログイン(ウォレットでログインした後もメールアドレスが必要)ができるようです。

しかし、開発者はプラグインのインストールとその後のDiscourseのブートストラップを妨げる問題に直面しています。詳細は以下のIssueに記載されています。もしかしたら非常に簡単な問題で、誰かが開発者のためにPRを提出できるかもしれません。

「いいね!」 1

ビールを注いでくれ :wink:
GitHubのイシューに解決策があります。

「いいね!」 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 これについてトピックを分割していただけますか?このプラグインには公式トピックがなく、開発者はメタにいないと思います。

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: Unable to activate eth-0.5.1, because openssl-3.0.0 conflicts with 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 ましたが、まだマージされていません。それまでの間は GitHub - communiteq/discourse-siwe-auth: Discourse plugin for SIWE authentication を使用できます。

「いいね!」 3

これは機能することを確認できます!マイケルさん、ありがとうございます。

「いいね!」 1

要約すると、イシュー Cannot Install Plugin on Self-Hosted Discourse server - rbsecp256k1 · Issue #15 · spruceid/discourse-siwe-auth · GitHub で説明されている before_code と、私が(現在マージされていない)PR を作成した eth gem の新しいバージョンの両方が必要です。

「いいね!」 5

SpruceチームのRoccoです。公式フォーラムでは少し遅くなりましたが、こんにちは。

修正していただきありがとうございます、@michaeldさん。おかげで問題は解決し、こちらでもドキュメントを更新しました。この件を取り上げていただき、重ねて感謝いたします。私たちは現在もSign-In with Ethereumに関する開発とメンテナンスを積極的に行っています。

また、お伺いしたいのですが、将来的にはこれが公式にサポートされるプラグインになる可能性はありますか? :grinning: Discourseは素晴らしいので、セルフホストされていないインスタンスにもこの機能拡張を検討したいと考えています。

「いいね!」 2

明確にするために、Communiteq はマネージドホスティングプランでもこのプラグインをサポートしており、Professional プラン以上で利用可能です。

「いいね!」 3

申し訳ありませんでした!

謝る必要はありません!公式ホスティングには(まだ?)ありません。これらのweb3プラグインへのコミットメントを強調したかっただけです。

「いいね!」 3

残念ながら、公式にはサポートされていないプラグインです。

しかし、Commiteq社のサポートには間違いなく称賛に値します!Web3ユーザーをサポートするためなら何でも素晴らしいことです。

こちら側では、Sign-In with Ethereumの採用をサポートするためのさまざまな方法に取り組んでおり、Discourseは常に私たちのリストのトップにありました。そのため、標準化EIP-4361後にプラグインを作成しました。もう一つ常に考えていたのは、それに他に何を追加するかということです。カスタムRPCプロバイダーが最初の要素の1つです。

「いいね!」 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