Extension de connexion avec Ethereum

Un plugin Discourse permettant aux utilisateurs de s’authentifier avec leur portefeuille Ethereum en utilisant
le standard Sign-In with Ethereum (SIWE). Les portefeuilles injectés
(MetaMask, Safe, etc.) fonctionnent immédiatement. Les noms ENS et les avatars sont résolus
côté serveur lorsqu’un point de terminaison RPC est configuré.

Prérequis

  • Un forum Discourse auto-hébergé ou hébergé chez un fournisseur prenant en charge
    les plugins tiers, comme Communiteq.

Installation

Accédez au fichier app.yml de votre conteneur :

cd /var/discourse
nano containers/app.yml

Ajoutez l’URL du dépôt du plugin au crochet 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 # <-- ajouté

Suivez le format existant de la ligne docker_manager.git ; si elle ne contient
pas sudo -E -u discourse, utilisez alors
git clone https://github.com/signinwithethereum/discourse-siwe-auth.git à la place.

Reconstruisez le conteneur :

cd /var/discourse
./launcher rebuild app

Configuration

Après l’installation, trouvez le plugin sous Admin > Plugins et assurez-vous qu’il
est activé :

Cliquez sur Paramètres pour configurer le plugin :

À partir d’ici, vous pouvez personnaliser la phrase de connexion et ajouter optionnellement un
ID de projet WalletConnect / Reown. Sans ID de projet, seuls les portefeuilles injectés
(MetaMask, Safe, etc.) sont disponibles.

Paramètres

Paramètre Description
Discourse siwe enabled Activer ou désactiver l’authentification Sign-In with Ethereum.
Siwe ethereum rpc url Optionnel. Un point de terminaison JSON-RPC Ethereum utilisé pour la résolution des noms/avatars ENS et la vérification des signatures EIP-1271 (requis pour les portefeuilles de contrats intelligents comme SAFE). Un fournisseur dédié (Alchemy, Infura) est recommandé. Exemple : https://mainnet.infura.io/v3/VOTRE_CLE.
Siwe project ID Optionnel. Un ID de projet WalletConnect / Reown. Sans celui-ci, seuls les portefeuilles injectés (MetaMask, Safe, etc.) sont disponibles. Pour activer WalletConnect, créez un ID de projet gratuit sur dashboard.reown.com.
Siwe statement La phrase lisible par l’homme affichée dans le message SIWE. Par défaut : “Sign in with Ethereum”.

Fonctionnement

Lorsqu’un utilisateur clique sur le bouton de connexion Ethereum, le plugin ouvre une
authentification dédiée. L’utilisateur connecte son portefeuille, signe un message SIWE,
et est authentifié via une stratégie OmniAuth côté serveur.

Après la première connexion, les utilisateurs sont invités à associer une adresse e-mail à leur
compte. Si une URL RPC est configurée et que l’adresse connectée possède un nom ENS,
le nom est résolu et vérifié côté serveur, puis suggéré comme nom d’utilisateur par défaut.
Les avatars ENS sont récupérés via le service de métadonnées ENS et utilisés comme photo de profil.

Alternativement, les utilisateurs existants peuvent connecter leurs comptes Ethereum via
leurs paramètres de profil.

14 « J'aime »

quelques discussions sur les dépendances ici Discourse can't find gems specified in the plugin

Trouvé ceci sur GitHub, il semble être activement développé aussi. Il semble permettre les connexions web3 (nécessite toujours des adresses e-mail après la connexion avec votre portefeuille).

Cependant, le développeur rencontre un problème qui empêche l’installation du plugin et le démarrage de Discourse par la suite. Tous les détails dans le problème ci-dessous. C’est peut-être un problème très simple et quelqu’un ici peut soumettre une PR pour le développeur.

1 « J'aime »

Tiens ma bière :wink:
Solution dans le problème Github.

3 « J'aime »

C’est génial, j’essaie tout de suite. J’espère que cela aidera aussi le développeur :grinning_face:

EDIT : Je me retrouve avec la même erreur, même si on dirait que le gem est en cours d’installation :

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' a échoué avec le retour #<Process::Status: pid 777 exit 1>
Emplacement de l'échec : /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec a échoué avec les paramètres {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap a échoué avec le code de sortie 1
** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.

Pouvez-vous s’il vous plaît faire cela ?

2 « J'aime »

En parcourant les journaux, je publie ce qui me semble pertinent.

@modérateurs, peut-être une scission de sujet pour cela ? Il n’y a pas de sujet officiel pour ce plugin, je ne pense pas que le développeur soit sur meta.

I, [2022-07-04T16:43:46.394301 #1]  INFO -- : cd /var/www/discourse & 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)

Je ne vois pas d’autres erreurs pour le moment (ou je les manque, les journaux sont longs).

1 « J'aime »

Pour être honnête, je ne saisis pas bien ce qui se passe ici. :slightly_smiling_face: @RGJ et @michaeld ont le pouvoir de scinder, alors peut-être feront-ils les honneurs et géreront-ils cela de manière plus sensible que moi. :slightly_smiling_face::crossed_fingers: (ou, alternativement, choisissez le message à scinder, nommez la catégorie dans laquelle vous voulez qu’il aille et faites-moi savoir un titre à lui donner :+1:)

1 « J'aime »

Ma suggestion est séparée d’ici :

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

La catégorie la plus appropriée serait Support ou #plugins (je ne suis pas sûr… comment gérons-nous les plugins qui ne sont pas développés par un membre de Meta… peut-être qu’il rejoindra Meta ou nous pourrons l’inviter via GitHub à Meta un jour ?)

EDIT :

Il semble que ce soit le développeur, donc il est sur Meta ? @w4ll3

@michaeld a fait une PR pour cela hier, mais elle n’est pas encore fusionnée. Vous pouvez utiliser GitHub - communiteq/discourse-siwe-auth: Discourse plugin for SIWE authentication en attendant.

3 « J'aime »

Je peux confirmer que cela fonctionne ! Merci Michael.

1 « J'aime »

Pour résumer, vous avez besoin à la fois du before_code tel que décrit dans le problème Cannot Install Plugin on Self-Hosted Discourse server - rbsecp256k1 · Issue #15 · spruceid/discourse-siwe-auth · GitHub ET de la version plus récente de la gem eth pour laquelle j’ai créé la PR (actuellement non fusionnée).

5 « J'aime »

Un peu en retard sur le forum officiel, mais salut - Rocco de l’équipe Spruce.

Merci encore @michaeld pour les corrections, cela a résolu le problème et nous avons mis à jour la documentation de notre côté. Merci également d’avoir soulevé tout cela - nous développons / maintenons toujours activement des choses autour de Sign-In with Ethereum.

Je me demandais aussi - y a-t-il une voie pour en faire éventuellement un plugin officiellement pris en charge :grinning: - nous aimons Discourse et voulons trouver comment étendre cette fonctionnalité aux instances qui ne sont pas auto-hébergées.

2 « J'aime »

Pour plus de clarté, Communiteq prend en charge ce plugin sur nos plans d’hébergement gérés, il est disponible à partir du plan Professionnel.

3 « J'aime »

Mes excuses pour cela !

Pas besoin de vous excuser ! L’hébergement officiel ne l’a pas (encore ?). Je voulais juste souligner notre engagement envers ces plugins web3.

3 « J'aime »

Malheureusement, ce n’est pas un plugin officiellement pris en charge.

Mais félicitations pour le soutien de Communiteq ! Tout ce qui peut aider à soutenir les utilisateurs de Web3 est vraiment génial.

De notre côté, nous travaillons sur diverses façons de soutenir l’adoption de Sign-In with Ethereum et Discourse a toujours été en tête de notre liste, c’est pourquoi après l’avoir standardisé EIP-4361, nous avons créé le plugin. L’autre chose qui nous a préoccupés est de savoir quoi y ajouter d’autre - le fournisseur RPC personnalisé étant l’une des premières choses.

3 « J'aime »

Ce plugin ne fonctionne pas pour moi, il y a un problème avec le plugin, je ne parviens pas à l’installer. Quelqu’un peut-il partager une alternative ou m’aider avec celui-ci @michaeld @RGJ

Vous devrez partager des détails si vous souhaitez de l’aide.

1 « J'aime »

@RGJ lorsque j’essaie d’installer ce plugin, la reconstruction échoue avec cette erreur

Vous spécifiez le gem rbsecp256k1 dans /var/www/discourse/plugins/discourse-siwe-auth/plugin.rb, cependant il n'existe pas !
Recherché : /var/www/discourse/plugins/discourse-siwe-auth/gems/2.7.6/specifications/rbsecp256k1-5.1.0.gemspec