Sign-Funktion von web3.js zur Authentifizierung von Benutzern über MetaMask

Ich versuche, dem auf dieser Website gefundenen Beispiel zu folgen , um Benutzer mithilfe der MetaMask-Funktionalität zu authentifizieren. Darüber hinaus spezifiziert die web3.js-Dokumentation auf der folgenden Seite diese Zeichenfunktion:

 web3.eth.personal.sign(dataToSign, address, password [, callback])

Ich habe kein Problem damit, die dataToSign- und Adresswerte an diese Funktion zu übergeben, aber wie kann ich ihr das Passwort übergeben?

Ist dies ansonsten die richtige Funktion, um eine Nonce zu signieren, die zum Authentifizieren eines Benutzers verwendet wird? Vielleicht muss ich eine andere Funktion verwenden? Dies ist mein Versprechen, die Funktion aufzurufen (mit verschiedenen möglichen Alternativfunktionen):

 return new Promise((resolve, reject) =>
   // NOt sure which function among the ones below to use:
   this.web3.eth.personal.sign(this.web3.fromUtf8(nonce), account, (err, signature) => { // Or         
   this.web3.eth.sign(nonce, account, (err, signature) => { // Or
   this.web3.eth.accounts.sign(nonce, account, (err, signature) => { // Or
   this.web3.eth.personal.sign(nonce, account, password, (err, signature) => {
       if (err) return reject(err)
       return resolve([account, signature])
     })
   )

Ich hatte mit keinem von ihnen viel Erfolg.

Danke schön. J

Antworten (1)

Der Artikel, auf den Sie verlinkt haben, ist mehr als zwei Jahre alt!! Es wurde auf die vorherige Version v0.20 von web3 verwiesen.

Mit web3 v1.2 gab es mehrere Änderungen. Beim Signieren können Sie wählen zwischen:

Diese Antwort enthält ein Beispiel mit der korrekten Syntax für web3 v1.2 für die ersten beiden Fälle: https://ethereum.stackexchange.com/a/76578

Vielen Dank Ismael! Ja in der Tat, das funktioniert. Die MetaMask-Eingabeaufforderung zeigt jedoch die folgende Meldung an: „Das Signieren dieser Nachricht kann gefährliche Nebenwirkungen haben. Signieren Sie nur Nachrichten von Websites, denen Sie vollständig vertrauen, mit Ihrem gesamten Konto. Diese gefährliche Methode wird in einer zukünftigen Version entfernt.“ Würden Sie wissen, ob diese Methode in Zukunft tatsächlich entfernt wird? Danke nochmal.
Außerdem besteht die Meldung am Prompt ausschließlich aus 0x
@JF0001 Der Vorschlag EIP 712 sollte diese Probleme beheben. Es gibt ein Repo mit funktionierenden Beispielen für Metamask github.com/danfinlay/js-eth-personal-sign-examples . Der Vorschlag ist noch nicht abgeschlossen, daher sind einige Wallets möglicherweise nicht zu 100 % konform (mobile Wallets). Wenn Ihr Ziel Metamask ist, sollte es Ihnen gut gehen, andernfalls sollten Sie die Brieftaschen testen, die Sie unterstützen möchten.