Plugin Sign-In com Ethereum

Um plugin para Discourse que permite aos usuários autenticar-se usando sua carteira Ethereum por meio do padrão Sign-In with Ethereum (SIWE). Carteiras injetadas (MetaMask, Safe, etc.) funcionam imediatamente. Nomes ENS e avatares são resolvidos no lado do servidor quando um endpoint RPC está configurado.

Requisitos

  • Um fórum Discourse auto-hospedado ou hospedado por um provedor que suporte plugins de terceiros, como Communiteq.

Instalação

Acesse o arquivo app.yml do seu container:

cd /var/discourse
nano containers/app.yml

Adicione a URL do repositório do plugin ao hook 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 # <-- adicionado

Siga o formato existente da linha docker_manager.git; se ela não contiver sudo -E -u discourse, use git clone https://github.com/signinwithethereum/discourse-siwe-auth.git em vez disso.

Reconstrua o container:

cd /var/discourse
./launcher rebuild app

Configuração

Após a instalação, localize o plugin em Admin > Plugins e certifique-se de que ele está habilitado:

Clique em Configurações para configurar o plugin:

A partir daqui, você pode personalizar a declaração de login e opcionalmente adicionar um ID de projeto WalletConnect / Reown. Sem um ID de projeto, apenas carteiras injetadas (MetaMask, Safe, etc.) estarão disponíveis.

Configurações

Configuração Descrição
Discourse siwe enabled Habilitar ou desabilitar a autenticação Sign-In with Ethereum.
Siwe ethereum rpc url Opcional. Um endpoint JSON-RPC da Ethereum usado para resolução de nomes/avatares ENS e verificação de assinatura EIP-1271 (necessário para carteiras de contrato inteligente como SAFE). Recomenda-se um provedor dedicado (Alchemy, Infura). Exemplo: https://mainnet.infura.io/v3/SEU_CHAVE.
Siwe project ID Opcional. Um ID de projeto WalletConnect / Reown. Sem ele, apenas carteiras injetadas (MetaMask, Safe, etc.) estarão disponíveis. Para habilitar o WalletConnect, crie um ID de projeto gratuito em dashboard.reown.com.
Siwe statement A declaração legível exibida na mensagem SIWE. O padrão é “Sign in with Ethereum”.

Como funciona

Quando um usuário clica no botão de login Ethereum, o plugin abre uma autenticação dedicada. O usuário conecta sua carteira, assina uma mensagem SIWE e é autenticado por meio de uma estratégia OmniAuth no lado do servidor.

Após o primeiro login, os usuários são solicitados a associar um endereço de e-mail à sua conta. Se uma URL RPC estiver configurada e o endereço conectado tiver um nome ENS, o nome será resolvido e verificado no lado do servidor, sendo sugerido como nome de usuário padrão. Avatares ENS são buscados por meio do serviço de metadados do ENS e usados como foto de perfil.

Alternativamente, usuários existentes podem conectar suas contas Ethereum por meio das configurações de perfil.

14 curtidas

alguma discussão sobre dependências aqui Discourse can't find gems specified in the plugin

Encontrei isto no GitHub, parece estar em desenvolvimento ativo também. Parece permitir logins web3 (ainda exigem endereços de e-mail após o login com sua carteira).

No entanto, o desenvolvedor está enfrentando um problema que impede a instalação do plugin e o bootstrapping do discourse depois. Detalhes completos na issue abaixo. Talvez seja um problema muito simples e alguém aqui possa enviar um PR para o desenvolvedor.

1 curtida

Segura minha cerveja :wink:
Solução na issue do Github.

3 curtidas

Isso é incrível, estou tentando agora mesmo. Espero que isso ajude o desenvolvedor também :grinning_face:

EDIT: Acabo com o mesmo erro, parece, embora pareça que a gem está sendo instalada:

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.

Você pode fazer isso, por favor?

2 curtidas

Analisando os logs, postando o que acredito que possa ser relevante.

@moderators talvez uma divisão de tópico para isso? Não há um tópico oficial deste plugin, acho que o desenvolvedor não está no 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)

Não vejo outros erros neste momento (ou estou perdendo, os logs são longos)

1 curtida

Para ser honesto, não estou entendendo o que está acontecendo aqui. :slightly_smiling_face: @RGJ e @michaeld têm o poder de dividir, então talvez eles façam as honras e gerenciem de uma maneira mais sensível do que eu. :slightly_smiling_face::crossed_fingers: (ou, alternativamente, escolha a postagem para dividir, nomeie a categoria para onde ela deve ir e me diga um título para dar a ela :+1:)

1 curtida

Minha sugestão é separada daqui:

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

A categoria mais adequada seria Support ou #plugins (não tenho certeza… como lidamos com plugins que não são desenvolvidos por um membro da Meta… talvez ele se junte à Meta ou possamos convidá-lo pelo GitHub para a Meta um dia?)

EDIT:

Parece que este é o desenvolvedor, então ele está na Meta? @w4ll3

@michaeld fez um PR para isso ontem, mas ainda não foi mesclado. Você pode usar GitHub - communiteq/discourse-siwe-auth: Discourse plugin for SIWE authentication enquanto isso.

3 curtidas

Posso confirmar que isso funciona! Obrigado, Michael.

1 curtida

Para resumir, você precisa tanto do before_code conforme descrito na issue Cannot Install Plugin on Self-Hosted Discourse server - rbsecp256k1 · Issue #15 · spruceid/discourse-siwe-auth · GitHub QUANTO da versão mais recente da gem eth para a qual fiz o PR (atualmente não mesclado).

5 curtidas

Um pouco atrasado aqui no fórum oficial, mas olá - Rocco da equipe Spruce.

Obrigado novamente @michaeld pelas correções, resolveu o problema e atualizamos a documentação do nosso lado. Obrigado também por levantar tudo isso - ainda estamos desenvolvendo / mantendo ativamente as coisas em torno do Sign-In with Ethereum.

Também fiquei curioso - existe um caminho para eventualmente tornar isso um plugin oficialmente suportado :grinning: - adoramos o Discourse e queremos descobrir como estender essa funcionalidade para instâncias que não são auto-hospedadas.

2 curtidas

Apenas para esclarecer, o Communiteq suporta este plugin em nossos planos de hospedagem gerenciada, ele está disponível no plano Professional e superiores.

3 curtidas

Minhas desculpas por isso!

Não precisa se desculpar! A hospedagem oficial não o tem (ainda?). Eu só queria enfatizar nosso compromisso com esses plugins web3.

3 curtidas

Sim - infelizmente não é um plugin oficialmente suportado.

Mas definitivamente parabéns pelo suporte da Communiteq! Qualquer coisa para ajudar a apoiar usuários Web3 é realmente incrível.

Do nosso lado, estamos trabalhando de várias maneiras diferentes para apoiar a adoção do Sign-In with Ethereum e o Discourse sempre esteve no topo da nossa lista, e é por isso que, depois de o padronizarmos EIP-4361, criamos o plugin. A outra coisa que tem estado em mente é sobre o que mais adicionar a ele - com o provedor RPC personalizado sendo uma das primeiras partes.

3 curtidas

Este plugin não está funcionando para mim, há algum problema com o plugin que não consigo instalar. Alguém pode compartilhar uma alternativa ou ajudar com este? @michaeld @RGJ

Você precisará compartilhar detalhes se quiser ajuda.

1 curtida

@RGJ quando tento instalar este plugin, a reconstrução falha com este erro

Você está especificando a gem rbsecp256k1 em /var/www/discourse/plugins/discourse-siwe-auth/plugin.rb, no entanto, ela não existe!
Procurou por: /var/www/discourse/plugins/discourse-siwe-auth/gems/2.7.6/specifications/rbsecp256k1-5.1.0.gemspec