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;如何断开与元问题的连接?
发布于 2021-10-11 10:21:11
这不可能。
由于安全和隐私问题,连接/断开连接功能完全掌握在用户手中。
您只能通过将提供程序、chainId和selectedAccount重置为null并清除先前使用的缓存来假装断开连接。
记者:我知道这是一个严酷的现实。投票吧,因为这是唯一正确的答案!你必须从你的应用程序中假装用户断开了连接。这就是我在我的dapp,PancakeSwap,Uniswap的方式,等等。
发布于 2020-06-01 17:47:36
我想你能做的就是打电话给:
// 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;
}发布于 2021-08-09 23:03:30
您可以等待事件在断开连接时被触发(用户删除来自Dapp的Metamask中的连接),然后如果当前有其他帐户连接到Dapp,则可以使用新地址分派一个操作,否则您可以调用disconnecting函数。
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();
}
});https://ethereum.stackexchange.com/questions/83914
复制相似问题