Плагин для входа с помощью Ethereum

:information_source: Краткое описание Включение входа с помощью Ethereum на платформе Discourse
:hammer_and_wrench: Репозиторий GitHub - signinwithethereum/discourse-siwe-auth: Discourse plugin for SIWE authentication · GitHub
:open_book: Руководство по установке Как установить плагины в Discourse

Плагин для Discourse, позволяющий пользователям аутентифицироваться с помощью своего Ethereum-кошелька, используя стандарт Sign-In with Ethereum (SIWE). Встроенные кошельки (MetaMask, Safe и др.) работают сразу после установки. Имена ENS и аватары разрешаются на стороне сервера при настройке RPC-конечной точки.

Требования

  • Форум 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. Без идентификатора проекта доступны только встроенные кошельки (MetaMask, Safe и др.).

Настройки

Настройка Описание
Discourse siwe enabled Включение или отключение аутентификации через Sign-In with Ethereum.
Siwe ethereum rpc url Опционально. Конечная точка Ethereum JSON-RPC, используемая для разрешения имён ENS/аватаров и проверки подписей EIP-1271 (требуется для кошельков смарт-контрактов, таких как SAFE). Рекомендуется использовать выделенного провайдера (Alchemy, Infura). Пример: https://mainnet.infura.io/v3/YOUR_KEY.
Siwe project ID Опционально. Идентификатор проекта WalletConnect / Reown. Без него доступны только встроенные кошельки (MetaMask, Safe и др.). Чтобы включить WalletConnect, создайте бесплатный идентификатор проекта на dashboard.reown.com.
Siwe statement Текст сообщения для входа, отображаемый в сообщении SIWE. По умолчанию — “Sign in with Ethereum”.

Как это работает

Когда пользователь нажимает кнопку входа через Ethereum, плагин открывает отдельный процесс аутентификации. Пользователь подключает свой кошелёк, подписывает сообщение SIWE и аутентифицируется с помощью стратегии OmniAuth на стороне сервера.

После первого входа пользователю предлагается связать адрес электронной почты со своим аккаунтом. Если настроена RPC-конечная точка и у подключённого адреса есть имя ENS, это имя разрешается и проверяется на стороне сервера, а затем предлагается в качестве имени пользователя по умолчанию. Аватары ENS загружаются через службу метаданных ENS и используются в качестве фотографии профиля.

Кроме того, существующие пользователи могут подключить свои Ethereum-аккаунты через настройки профиля.

14 лайков

некоторое обсуждение зависимостей здесь Discourse can't find gems specified in the plugin

Нашёл это на GitHub, похоже, проект активно развивается. Похоже, что он поддерживает вход через Web3 (хотя после входа через кошелёк всё ещё требуется указание адреса электронной почты).

Однако разработчик столкнулся с проблемой, которая мешает установке плагина и последующей настройке Discourse. Полные подробности в issue ниже. Возможно, это очень простая проблема, и кто-то из вас сможет отправить PR разработчику.

1 лайк

Держи моё пиво :wink:
Решение в issue на GitHub.

3 лайка

Это здорово, пробую прямо сейчас. Надеюсь, это поможет разработчику тоже :grinning_face:

РЕДАКТИРОВАНИЕ: У меня всё равно возникает та же ошибка, хотя кажется, что gem устанавливается:

версия 2.3.0.
Успешно установлен rubyzip-2.3.2
Установлен 1 gem
ОШИБКА
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' завершилась с ошибкой, возвращённой #<Process::Status: pid 777 exit 1>
Место возникновения ошибки: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
Выполнение завершилось ошибкой с параметрами {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
Загрузка не удалась с кодом выхода 1
** ЗАГРУЗКА НЕ УДАЛАСЬ ** Пожалуйста, прокрутите вверх и поищите сообщения об ошибках, которые появились раньше; их может быть больше одной.
./discourse-doctor может помочь диагностировать проблему.

Не могли бы вы это сделать?

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: 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 когда-нибудь?)

EDIT:

Похоже, это разработчик, значит, он уже на Meta? @w4ll3

@michaeld вчера создал PR по этому вопросу, но он ещё не принят. Временно вы можете использовать https://github.com/communiteq/discourse-siwe-auth/.

3 лайка

Подтверждаю, что это работает! Спасибо, Майкл.

1 лайк

Итак, подводя итог, вам нужны и before_code, как описано в проблеме Cannot Install Plugin on Self-Hosted Discourse server - rbsecp256k1 · Issue #15 · spruceid/discourse-siwe-auth · GitHub, и более новая версия гема eth, для которой я создал (пока не принятый) PR.

5 лайков

Чуть запоздал с сообщением на официальном форуме, но привет — это Рокко из команды Spruce.

Ещё раз спасибо @michaeld за исправления, всё сработало, и мы с нашей стороны обновили документацию. Также благодарим за поднятие этой темы — мы по-прежнему активно разрабатываем и поддерживаем решения вокруг Sign-In with Ethereum.

Кстати, возник вопрос: есть ли путь к тому, чтобы в будущем это стало официально поддерживаемым плагином :grinning: — мы любим Discourse и хотим понять, как расширить эту функциональность для инстансов, которые не являются самохостинговыми.

2 лайка

Только для ясности: Communiteq поддерживает этот плагин на наших планах управляемого хостинга; он доступен на плане Professional и выше.

3 лайка

Приношу свои извинения за это!

Не извиняйтесь! В официальном хостинге его пока нет (?). Я просто хотел подчеркнуть нашу приверженность этим плагинам web3.

3 лайка

Да, к сожалению, это неофициально поддерживаемый плагин.

Но безусловно, спасибо за поддержку от Communiteq! Всё, что помогает поддерживать пользователей Web3, — это действительно здорово.

С нашей стороны мы работаем над различными способами поддержки внедрения функции «Вход с помощью Ethereum», и Discourse всегда был в приоритете. Именно поэтому после стандартизации EIP-4361 мы создали этот плагин. Также мы постоянно думаем о том, что ещё можно добавить в него — одним из первых шагов стала поддержка пользовательского RPC-провайдера.

3 лайка

Этот плагин не работает у меня, есть проблема с установкой плагина. Кто-нибудь может предложить альтернативу или помочь с этим? @michaeld @RGJ

Чтобы получить помощь, вам нужно предоставить детали.

1 лайк

@RGJ при попытке установить этот плагин сборка завершается ошибкой:

Вы указываете gem rbsecp256k1 в файле /var/www/discourse/plugins/discourse-siwe-auth/plugin.rb, однако он не существует!
Поиск выполнен по пути: /var/www/discourse/plugins/discourse-siwe-auth/gems/2.7.6/specifications/rbsecp256k1-5.1.0.gemspec