如何检测 MetaMask 登录

How to detect MetaMask login

我们如何检测用户何时在页面加载后登录MetaMask?是否需要诉诸轮询,或者是否有页面可以监听的事件?

截至 2020 年,web3 站点必须通过 ethereum.request({ method: 'eth_requestAccounts' }) 请求帐户访问权限,然后通过 accountsChanged 事件监听帐户更改。

详情请见the MetaMask documentation

使用 web3 版本 1.0.0,元掩码提供程序公开了一个 'update' 事件,您可以在它的 publicConfigStore 上收听。

web3.currentProvider.publicConfigStore.on('update', callback);

每当这些属性发生变化时,您的回调将传递一个带有 'selectedAddress' 和 'networkVersion' 的对象。

通过 'eth_requestAccounts' 请求帐户访问权限并不是您能做的最好的事情,因为这会不断在 metamask 中添加请求(性能不佳)和糟糕的用户体验(弹出窗口 + 通知)

方法是通过

const isUnlocked = await window?.ethereum?._metamask.isUnlocked();
console.debug({ isUnlocked });