集成Web3.0区块链去中心化MetaMask统一认证
流程:安装Metamask浏览器插件===>导入以太坊库ethers===>打开浏览器插件===>前端进行上链操作===>判断是否在公链===>获取当前用户的上链钱包地址===>加签操作===>到后端进行钱包地址+签名验签===>信息入库生成本站token
怎么做的:
前端点击MetaMask按钮,触发click事件,到声明登录激活的方法,在方法中先开启浏览器插件,声明实例过后上链,上链成功,列出所有的钱包列表,也就是当前连接的钱包,获取用户钱包地址,获取签名对象,通过时间戳拼接生成签名,通过axios方法请求后端,后端拿到签名进行验签,这里我写了一个checksign方法,在这里创建时间戳,生成签名,进行反编译获取签名对象,如果该签名对象等于钱包地址,就执行登陆的正常操作,若不一样,返回False
1 class UserHandler(BaseMange): 2 3 # 用户验签 metamask登录 4 async def put(self): 5 6 accountaddress = self.get_argument('accountaddress',None) 7 signature = self.get_argument("signature",None) 8 cate = self.get_argument('cate',None) 9 print('cate>>>>',cate) 10 11 res_sign = await self.checksign(accountaddress,signature) 12 print("aaaaaaaa",res_sign) 13 14 if res_sign: 15 try: 16 user = await self.create(UserModel,{"phone":accountaddress,"password":make_password('123'),"role":cate}) 17 except Exception as e: 18 print(str(e)) 19 20 _where = "(model.phone == '{}' ) & (model.role == {})".format(accountaddress,cate) 21 22 user = await self.get_one_where(UserModel,_where) 23 24 25 26 token = await self.makejwt({'id':user.id}) 27 28 res = {"errcode":0,'msg':'登陆成功',"token":token,"phone":user.phone} 29 30 return self.finish(res) 31 else: 32 res = {"errcode": 1, 'msg': '你的钱包不合法'} 33 34 return self.finish(res)
写checksign方法验签:
1 async def checksign(self,accountaddress,signature): 2 3 # 获取当前域名 4 # print(self.request) 5 domain = self.request.host 6 7 print("@@@@",domain) 8 9 if ":" in domain: 10 domain = domain[0:domain.index(":")] 11 12 if domain == "localhost": 13 domain = "127.0.0.1" 14 15 # 时间戳 默认秒 16 now = int(time.time()) 17 18 sortanow = now - now % 600 19 20 # 生成签名 21 message = "Signing in to {} at {}".format(domain, sortanow) 22 print(message) 23 24 # 反编译 25 message_hash = defunct_hash_message(text=message) 26 27 # 获取签名对象 28 signer = w3.eth.account.recoverHash(message_hash, signature=signature) 29 30 if accountaddress == signer: 31 32 return True 33 else: 34 return False
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!