【发布时间】:2021-08-23 16:03:28
【问题描述】:
我正在使用 MetaMask 将交易发送到我的 DApp 中的合约。当用户单击注销按钮时,我需要如何从我的 DApp 断开 MetaMask 帐户方面的帮助。
前端:ReactJS
后端:Web3js、Solidity(以太坊)
【问题讨论】:
标签: reactjs ethereum solidity web3 metamask
我正在使用 MetaMask 将交易发送到我的 DApp 中的合约。当用户单击注销按钮时,我需要如何从我的 DApp 断开 MetaMask 帐户方面的帮助。
前端:ReactJS
后端:Web3js、Solidity(以太坊)
【问题讨论】:
标签: reactjs ethereum solidity web3 metamask
我不知道你是否还有这个问题,但是在异步函数内部你可以调用 clearCachedProvider。 web3Modal 变量被转换为我对 web3 的实例化,例如const web3Modal = new Web3Modal...:
await web3Modal.clearCachedProvider()
【讨论】:
用户可以使用 MetaMask 本身内的帐户断开按钮断开 MetaMask 帐户。此外,任何页面刷新或重新加载都会自动断开 MetaMask。
【讨论】:
connected,即使在单击注销后也是如此。他们可能只是他们分配地址的变量
一旦连接了钱包,用户就可以断开连接,您无法控制元掩码。您实际上是通过检查您是否可以访问他们的帐户来模拟登录和注销的概念。
const {ethereum} = window;
const accounts = await ethereum.request({method: 'eth_accounts'});
if (accounts && accounts.length > 0) {
console.log("user is connected");
} else {
console.log("user not connected");
}
我要做的一件事是注意任何帐户更改:
window.ethereum.on('accountsChanged', async () => {
// Do something
});
通常在我的应用程序中,我有一个初始化函数来检查元掩码,它安装了吗?有联系吗?然后我存储状态,以便应用程序可以持续存在,就好像用户在页面刷新时登录一样。如果发生任何事情,例如帐户更改或断开连接,上面的脚本会运行,我会再次运行我的初始化脚本来重置状态。
// Runs on page load
initialise();
// Runs whenever the user changes account state
window.ethereum.on('accountsChanged', async () => {
initialise();
});
因此,据我所知,现在有办法联系并断开用户的连接。
let connected = false;
let installed = false;
function isMetaMaskInstalled() {
return Boolean(window.ethereum && window.ethereum.isMetaMask);
}
async function isMetaMaskConnected() {
const {ethereum} = window;
const accounts = await ethereum.request({method: 'eth_accounts'});
return accounts && accounts.length > 0;
}
async function initialise() {
connected = await isMetaMaskConnected();
installed = isMetaMaskInstalled();
}
initialise();
window.ethereum.on('accountsChanged', async () => {
initialise();
});
然后,我的 UI 会响应 installed 和 connected 变量。
【讨论】:
根据文档,我们可以使用 onboard.walletReset() 并且它返回 undefined 并且它不会断开与 wallet.from 前端的连接,我们需要将状态设为 emp 以下是文档中的清晰理解 // 用户想要退出会话并且需要重置钱包状态... onboard.walletReset() // 这个方法是同步的,返回 undefined
【讨论】:
如 EIP-1193 所附,web3.js 目前仍仅适用于连接和事件,例如断开事件、网络更改和钱包帐户更改。
【讨论】: