首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用MetaMask断开Web3modal钱包

如何用MetaMask断开Web3modal钱包
EN

Ethereum用户
提问于 2020-06-01 17:39:33
回答 4查看 24.4K关注 0票数 8
代码语言:javascript
复制
I am using metamask with kovan to connect to the wallet 
import React, { useState, useEffect} from 'react';
import Web3 from "web3";
import Web3Modal from "web3modal";
import Navbar from './components/navbar';

function App() {
const providerOptions = {};
const web3Modal = new Web3Modal({
  network: "mainnet", // optional
  cacheProvider: true, // optional
  providerOptions // required
});

  const [account, setAccount] = useState('');
  async function connect() {
    try {
      const provider = await web3Modal.connect();
      const web3 = new Web3(provider);
      const accounts = await web3.eth.getAccounts();
      setAccount(accounts[0]);
    } catch (err) {
      console.error(err);
    }
  }


  useEffect(() => {
    if (window.web3) {
      connect();
    }
  }, []);

   async function disconnect() {
    const clear = await web3Modal.clearCachedProvider();
  }

  return (
    <div>
     <Navbar account={account} connect={connect} disconnect={disconnect} />
    </div>
  );
}

export default App;

如何断开与元问题的连接?

EN

回答 4

Ethereum用户

发布于 2021-10-11 10:21:11

这不可能。

由于安全和隐私问题,连接/断开连接功能完全掌握在用户手中。

您只能通过将提供程序、chainId和selectedAccount重置为null并清除先前使用的缓存来假装断开连接。

记者:我知道这是一个严酷的现实。投票吧,因为这是唯一正确的答案!你必须从你的应用程序中假装用户断开了连接。这就是我在我的dapp,PancakeSwap,Uniswap的方式,等等。

票数 6
EN

Ethereum用户

发布于 2020-06-01 17:47:36

我想你能做的就是打电话给:

代码语言:javascript
复制
  // TODO: Which providers have close method?
  if(provider.close) {
    await provider.close();

    // If the cached provider is not cleared,
    // WalletConnect will default to the existing session
    // and does not allow to re-scan the QR code with a new wallet.
    // Depending on your use case you may want or want not his behavior.
    await web3Modal.clearCachedProvider();
    provider = null;
  }

你也可以在这里找到这个例子。

票数 1
EN

Ethereum用户

发布于 2021-08-09 23:03:30

您可以等待事件在断开连接时被触发(用户删除来自Dapp的Metamask中的连接),然后如果当前有其他帐户连接到Dapp,则可以使用新地址分派一个操作,否则您可以调用disconnecting函数。

代码语言:javascript
复制
         const provider = await new web3(web3.givenProvider);
         provider.on('accountsChanged', (code: number, reason: string) => {
                        const accountSwitch = code[0];
                        if (accountSwitch){
                            if (accountSwitch) {
                                dispatch({
                                    type: _const.ADDRESS,
                                    payload: { address: accountSwitch }
                                })
                            }
                        }else{
                            DisconnectFromWallet();
                        }
                    });
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/83914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档