尝试连接MetaMask时触发-32002错误,扩展弹窗但连接失败
解决MetaMask授权弹窗弹出但报错code -32002的问题
错误原因
你遇到的code: -32002是MetaMask的资源锁定错误,核心原因是重复发起了账户授权请求:你既直接调用了window.ethereum.request({method: "eth_requestAccounts"}),又使用了ethers v6的BrowserProvider——当你调用provider.getSigner()时,ethers会自动触发账户授权流程,两次请求冲突导致MetaMask返回该错误。
修正后的代码
移除直接调用window.ethereum.request的逻辑,改用ethers的API完成账户获取和授权:
try { if(!window.ethereum) return console.log("安装MetaMask") console.log("two...") // 用ethers的BrowserProvider处理授权,无需单独调用eth_requestAccounts const provider = new ethers.BrowserProvider(window.ethereum) // getSigner会自动触发MetaMask授权弹窗 const signer = await provider.getSigner() // 获取授权后的账户地址 const acct = await signer.getAddress() setAcct(acct) const contract = contractFetcher(signer) const allHoldersID = await contract.getUserId() const userAcctBal = await contract.balanceOf(acct) setUserID(allHoldersID) setAcctBalance(userAcctBal.toNumber()) console.log(allHoldersID) } catch (error) { console.log(error) }
额外排查点
- 检查页面连接按钮是否被重复绑定点击事件,导致多次触发授权请求
- 关闭其他打开的MetaMask授权弹窗或同站点的其他标签页,避免资源冲突
- 重置MetaMask与本地站点的连接:打开MetaMask -> 设置 -> 连接的站点 -> 找到
localhost:3000-> 移除后重新尝试连接
内容的提问来源于stack exchange,提问作者Olaniyi Philip
相关产品推荐
相关产品推荐

