最近在为AI·Joe做链上方面的集成,包括MetaMask登录,USDT充值这些。
x402协议挺火的,也标示着一个新的赛道出现了。但在这之前,可以先集成链上登录和充值这些功能。
MetaMask登录
MetaMask登录简单来讲就是用签名验证来进行登录,这比用户名和密码来得省事些。当然更大的好处是这种即插即用的功能非常Web3!以前用户名注册一般都要数分钟,而用MetaMask登录只需数秒钟即可完成,非常直接高效。
一般流程
用户先连接MetaMask钱包,向后台发送address, 获取nonce。 本地生成签名后发送后台验证,得到token,完成登录。
签名和验证消息
import { ethers } from 'ethers'
// 签名消息(前端)
const provider = new ethers.BrowserProvider(window.ethereum)
const signer = await provider.getSigner()
let nonce = await getNonce('/getnonce', option) //从后端获取
let msg = `I am signing my one-time nonce: ${nonce}`
let signature = await signer.signMessage(msg)
// 验证签名(后端)
let nonce = Math.floor(Math.random() * 100000000)
let msg = `I am signing my one-time nonce: ${nonce}` //和前端保持一样的消息
let signature = "0xcc46c4xxxxx" //前端传过来的值
const recoveredAddress = ethers.verifyMessage(msg, signature)
console.log("恢复的地址:", recoveredAddress)
登录界面如上图所示,前端签名后传给后端验证,如果正确则是登录成功!后面采用JWT方法来使用,或是其它都是可以的。