Metamask / Web3:在 metamask 停止将 web3 注入浏览器后对用户进行身份验证
Posted
技术标签:
【中文标题】Metamask / Web3:在 metamask 停止将 web3 注入浏览器后对用户进行身份验证【英文标题】:Metamask / Web3: Authenticating a user after metamask stopped injecting web3 into the browser 【发布时间】:2021-07-30 10:03:56 【问题描述】:我想创建无密码身份验证(使用 Metamask 对消息进行签名;然后在服务器上验证消息,然后分配 JWT 令牌)。我希望将用于签署消息的部分写入 vanila javascript 文件中。
我在网上看到的大多数文章都是 2018 年的,并且谈论使用 web3 中的 web3.eth.personal.sign
方法,该方法通过 Metamask 注入到浏览器中。但是我知道 Metamask 不再是这种情况。现在 web3 不再注入了,我应该调用什么函数来使用 Metamask 签署消息?
我尝试过的...
我知道有一个 window.ethereum
对象注入浏览器,但我似乎无法在 Metamask Documentaiton 中找到 web3.eth.personal.sign
的等效函数
我猜另一种方法是使用web3
而不使用window.ethereum
,但我如何将它注入到香草javascript 文件中?另外,如果我只使用 web3 作为独立设备,如何确保消息由 Metamask 签名?
【问题讨论】:
【参考方案1】:您可以使用web3 npm package。然后你可以将它连接到 Metamask:
import Web3 from "web3";
window.ethereum.request( method: "eth_requestAccounts" );
const web3 = new Web3(window.ethereum);
这将弹出元掩码并要求用户选择一个帐户。
然后要签署一条消息,您可以调用 web3:
const dataToSign = "My test message";
const accounts = await web3.eth.getAccounts();
const signature = await web3.eth.sign(dataToSign, accounts[0]);
文档:https://web3js.readthedocs.io/en/v1.3.4/web3-eth.html#sign
这将导致 Metamask 要求用户使用他们当前活动的帐户对数据进行签名。我不确定如何验证签名是否正确。
【讨论】:
以上是关于Metamask / Web3:在 metamask 停止将 web3 注入浏览器后对用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
获取 web3.eth.accounts (MetaMask) 的问题
Web3 系列开发教程——创建你的第一个 NFT创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片