Как я могу автоматически перезагружать базу децентрализованных приложений в зависимости от статуса учетной записи Metamask?
Я хочу разработать аутентификацию на основе метамаски (например, ту, что используется в Crypokitties), для которой я могу разработать код, который определяет, заблокирована ли метамаска или нет. Но проблема в том, что мне приходится вручную обновлять свою веб-страницу, чтобы зафиксировать последний статус метамаски, если она заблокирована или разблокирована.
Предположим, если пользователь выходит из метамаски, я хочу поймать этот экземпляр и одновременно закрыть децентрализованное приложение без каких-либо дальнейших действий со стороны пользователя (в моем случае это происходит только после того, как я вручную обновлю страницу).
Буду признателен, если кто-то создал подобную функцию и может направить с помощью логики или фрагментов кода.
Поскольку Metamask внедряет экземпляр Web3 в window
объект, вы можете проверить существование объекта. Чтобы определить, разблокирована ли метамаска, вы можете проверить в экземпляре Web3, есть ли доступный адрес.
Чтобы автоматически обновлять данные в JavaScript, вы можете использовать их setInterval(MyCheckingMethod,1000);
в своем основном экземпляре приложения.
Краткий пример ниже, но вы обнаружите, что большая часть взята с официальной страницы . Обратите внимание, что это просто в основном пустой, но прокомментированный пример, который вам придется адаптировать для вашего собственного варианта использования и потока данных:
export detectWeb3 = () => {
if(typeof window.web3 !== "undefined" ){ // load metamask's provider
const w3 = window.web3;
// Calling method to retrieve accounts. Method available since Web3 v1.x.x-beta
w3.eth.getAccounts().then( r => {
if (r.length > 0) {
// some addresses found.
} else {
// No address found
}
}).catch(e => { // Error catched if method doesn't exist
const accounts = w3.eth.accounts; // We'll try to get accounts from previous versions ( up to Web3 v0.20.x)
if (accounts.length > 0) {
// some addresses found
} else {
// No address found
}
});
}else{
// Instructions to execute if no Web3 instance has been detected.
}
}
setInterval(detectWeb3,1000);
Еще один отказ от ответственности: я взял часть кода из своих машинописных файлов. Возможно, вам придется принять это во внимание.
танмай
Как один
танмай