范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

集成Web3。0身份钱包MetaMask以太坊一键登录(Tornado6Vue。js3)

  上世纪九十年代,海湾战争的时候,一位美军军官担心他们的五角大楼会被敌人的一枚导弹干掉,从而导致在全球的美军基地处于瘫痪状态。这时候,有一位天才的科学家说,最好的中心就是没有中心。是的,这就是最朴素的去中心化思想,于是互联网出现了。一个没有互联网的时代是无法想象的,互联网的核心就是把一个信息分成若干的小件,用不同的途径传播出去,怎么方便怎么走。
  三十年后的今天,去中心化身份逐渐被广泛采用。用户的部分在线活动在链上是公开的,可通过加密钱包搜索到,用户在链上创造、贡献、赚取和拥有的东西,都反映了他们的喜好,也逐渐积累成该用户的身份和标识。
  当我们的用户厌倦了传统的电子邮件/密码注册流程时,他们会选择Google、GitHub等社交登录方式,这种方式虽然节约了用户的时间,但登录信息也会被第三方平台记录,也就是说我们用平台账号做了什么,平台都会一目了然,甚至还会对我们的行为进行分析、画像。那么有没有一种登录方式,它的所有信息都只保存在客户端和后端,并不牵扯三方平台授权,最大化的保证用户隐私呢?Web3.0给我们提供了一种选择:MetaMask。 MetaMask
  MetaMask是用于与以太坊区块链进行交互的软件加密货币钱包。MetaMask允许用户通过浏览器插件或移动应用程序访问其以太坊钱包,然后可以使用这些扩展程序与去中心化应用程序进行交互。当然了,首先需要拥有一个MetaMask钱包,进入https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn
  安装metamask浏览器插件:
  随后点开插件,创建账号,记录密码、钱包地址、以及助记词等信息。
  安装好插件之后,我们就可以利用这个插件和网站应用做交互了。 钱包登录流程
  登录逻辑和传统的三方登录还是有差异的,传统三方登录一般是首先跳转三方平台进行授权操作,随后三方平台将code验证码返回给登录平台,登录平台再使用code请求三方平台换取token,再通过token请求用户账号信息,而钱包登录则是先在前端通过Web3.js浏览器插件中保存的私钥对钱包地址进行签名操作,随后将签名和钱包地址发送到后端,后端利用Web3的库用同样的算法进行验签操作,如果验签通过,则将钱包信息存入token,并且返回给前端。
  前端签名操作
  首先需要下载前端的Web3.0操作库,https://docs.ethers.io/v4/,随后集成到登录页面中:
  这里我们基于Vue.js配合Axios使用。
  接着声明登录激活方法: sign_w3:function(){                      that = this;                     ethereum.enable().then(function () {      this.provider = new ethers.providers.Web3Provider(web3.currentProvider);      this.provider.getNetwork().then(function (result) {         if (result["chainId"] != 1) {              console.log("Switch to Mainnet!")          } else { // okay, confirmed we"re on mainnet              this.provider.listAccounts().then(function (result) {                 console.log(result);                 this.accountAddress = result[0]; // figure out the user"s Eth address                 this.provider.getBalance(String(result[0])).then(function (balance) {                     var myBalance = (balance / ethers.constants.WeiPerEther).toFixed(4);                     console.log("Your Balance: " + myBalance);                 });                  // get a signer object so we can do things that need signing                 this.signer = provider.getSigner();                  var rightnow = (Date.now()/1000).toFixed(0)         var sortanow = rightnow-(rightnow%600)          this.signer.signMessage("Signing in to "+document.domain+" at "+sortanow, accountAddress, "test password!")             .then((signature) => {               that.handleAuth(accountAddress,signature);             });                  console.log(this.signer);             })         }     }) })                  },
  通过使用signMessage方法返回签名,这里加签过程中使用基于时间戳的随机数防止未签名,当前端签名生成好之后,立刻异步请求后台接口: //检查验证                 handleAuth:function(accountAddress, signature){                       this.myaxios("/checkw3/","post",{"public_address":accountAddress,"signature":signature}).then(data =>{                          if(data.errcode==0){                             alert("欢迎:"+data.public_address);                             localStorage.setItem("token",data.token);                             localStorage.setItem("email",data.public_address);                             window.location.href = "/";                         }else{                             alert("验证失败");                         }                  });                    }
  这里将当前账户的钱包地址和签名传递给后端,如图所示:
  完整页面代码:              Edu                                                {% include "head.html" %}               

Sign-in

  • Connect With Meta Mask
  • Connect With GitHub
— or — {% include "foot.html" %} Tornado后端验签:   有人说,既然钱包私钥是存储在浏览器中,也就是保存在客户端,那签名已经通过私钥生成了,为什么还要过一遍后端呢?这不是多此一举吗?事实上,攻击者完全可能获取到前端生成的所有信息,所以签名一定必须得是后端提供,或者至少有一步后端验证,比如著名的微信小程序获取openid问题。   后端我们使用异步框架Tornado,配合web3库进行调用,首先安装依赖: pip3 install tornado==6.1 pip3 install web3==5.29.1   随后创建异步视图方法: from tornado.web import url import tornado.web from tornado import httpclient from .base import BaseHandlerfrom web3.auto import w3 from eth_account.messages import defunct_hash_message import time class CheckW3(BaseHandler): async def post(self): public_address = self.get_argument("public_address") signature = self.get_argument("signature") domain = self.request.host if ":" in domain: domain = domain[0:domain.index(":")] now = int(time.time()) sortanow = now-now%600 original_message = "Signing in to {} at {}".format(domain,sortanow) print("[+] checking: "+original_message) message_hash = defunct_hash_message(text=original_message) signer = w3.eth.account.recoverHash(message_hash, signature=signature) if signer == public_address: try: user = await self.application.objects.get(User,email=public_address) except Exception as e: user = await self.application.objects.create(User,email=public_address,password=create_password("third"),role=1) myjwt = MyJwt() token = myjwt.encode({"id":user.id}) self.finish({"msg":"ok","errcode":0,"public_address":public_address,"token":token}) else: self.finish({"msg":"could not authenticate signature","errcode":1})   这里通过recoverHash方法对签名进行反编译操作,如果反编译后的钱包地址和前端传过来的钱包地址吻合,那么说明当前账户的身份验证通过:   当验签通过之后,利用钱包地址在后台创建账号,随后将钱包地址、token等信息返回给前端,前端将其保存在stroage中即可。 结语   没错,将至已至,未来已来,是时候将Web3.0区块链技术融入产品了,虽然有些固有的思维方式依然在人们的脑海挥之不去,但世界却在时不我待地变化着,正是:青山遮不住,毕竟东流去!项目开源在https://github.com/zcxey2911/Tornado6_Vuejs3_Edu ,与君共觞。

书香浸润童年,阅读陪伴成长南谢村幼儿园亲子阅读活动莎士比亚曾经说过生活里没有书籍,就好像没有阳光智慧里没有书籍,就好像鸟儿没有翅膀。阅读对人成长的影响是巨大的,腹有诗书气自华,一个人读书,能让心灵丰富一个家庭读书,能涵养良好家风一到温泉,骑行诗画中天气正好骑着自行车穿梭在特色小镇沿途是人文风光山林风景微风阵阵,树叶沙沙还有什么比在温泉骑行更能释放压力呢?感受清凉的气息扑面而来自由放空自己踩着脚踏板向前享受自由的速度骑着自行车出疆攻略依吞布拉克格尔木巴音郭楞头条当前疫情政策相对比较明朗,跨区域便利,今天从巴州若羌县去往格尔木大概路况,一早6点多一点从若羌县城出发,许久没有走过,路两旁的路灯全都换了,看上去比较高大上,可想而知,太涨知识了,九寨沟4名游客光脚下水,被依法进行了行政处罚太涨知识了,今年8月8日,九寨沟风景区管理机构执法人员对在景区光脚下水的4名游客依法进行了行政处罚。当时,这四位游客还大闹管理机构,认为处理是滥用职权。那么,究竟是什么原因导致这4蒙顶山雪景,不敢私藏欢迎关注shijiechayuanms蒙顶山茶中国十大茶叶品牌雪落XUELUO蒙顶霜华无声万物潜藏雪落蒙顶一夜白头秋天的遗憾与烦恼一定要被冬天的雪埋藏美丽冻人看石猴也捂着耳朵玉树琼老沈阳西塔,西塔清崇德八年(1643年),清太宗皇太极敕令于盛京城东西南北四方各建塔寺,以求护国震方。两年后建成西塔及护国延寿寺,祈祝圣寿延年。乾隆皇帝曾为其题写匾额金粟祥光,置于正殿。逢五月初一蒙娜丽莎光芒下的传世之宝卢浮宫四十大件!卢浮宫(MuseduLouvre),位于法国巴黎市中心的塞纳河北岸,世界四大博物馆之首,馆藏总量达四十八万件。卢浮宫夜景01hr前世今生卢浮宫是巴黎的心脏,有着非常曲折复杂的经历。长白天下雪吉美在延边网红大V走延边活动启动为深度挖掘延边冰雪资源经济潜力,推动冰雪产业升级,让冷资源转化为热经济,延边州文广旅局结合时下网红效应,组织百位网红大V走进延边,集中宣传延边冰雪资源,助推延边冰雪旅游高质量发展。周末上山挖化石玩?注意,这样做有可能违法旅游爬山甚至走路都有可能见到化石,我们能带走吗?能赠送朋友或者买卖吗?中共云南省委全面依法治省委员会办公室云南省司法厅云南省普及法律常识办公室云南广播电视台联合推出云南普法专家访谈赞美与批评都是破坏历史的武器阅读前播放音乐,让生活充满阳光在头条看见彼此不尊重历史就会让历史重演。对于孩子们来说,我们终将老去,变成一段历史。如果没有能力让孩子们看清我们书写的历史,他们就不知道如何传承我们的赵睿拒绝出战,浙江强援抵达!广东大外援离队,上海超外表现懈怠头条创作挑战赛由于封闭酒店突发状况,导致近期不少CBA球队参赛人员不齐,吉林东北虎昨日只有9人可以出战广东宏远,青鸟国信更是只能以7人迎战上海久事,最终由于体力不支惜败。虽然名为赛
故事还没领证未婚夫去世,我决定认婆婆当妈,一起养大腹中孩子上午的妇产科门诊一片繁忙,产检的孕妇或坐或立地等候着,药欣萍在办公室忙得不亦乐乎,忽然等候区一阵骚乱,有人喊道有孕妇晕倒了。医生和护士们涌了过去,几个男家属帮着她们把晕倒的孕妇先搬老人的凄惨晚年,儿子不让进家门,被逼住在面包车,磕头下跪求助在的家长都比较重视孩子的教育问题,对于孩子的教育问题,最好就是从娃娃抓起,因为如果孩子长大了,他们的某些观念也就已经根深蒂固,不是那么容易纠正回来的,这时候家长再后悔,也没有多大的儿童跳绳注意事项家长越早掌握越好现在父母也会有意识地培养孩子技能的学习。在学校老师教,在家里自己督促在我们的线下教学中也经常有家长问到孩子学不会跳绳?跳绳速度太慢了应该怎么办?这里还是要强调一下!欲速而不达,跳绳那些不会告诉你的关于生孩子的二三事1。孕期要多吃水果补充维生素不假,但吃的太多后期容易得妊娠糖尿病。2。孕期要补充营养,是营养不是碳水,所以不需要强迫自己吃饭,如果胃口不好,不吃就不吃吧,少这一顿不会饿着肚里的孩子胎儿有手有脚,堕胎就是杀人!看到这些图片你就懂了当一个生命被孕育的时候也被称为生命的奇迹。不少第一次当妈妈的女生都感慨没想到自己生出了一个人!不少人因为好奇去搜索过刚怀孕,肚子的宝宝能看见吗?刚怀孕,肚子里的宝宝长什么样?网上跳初为人母我们需要准备好什么我们这代人接受了更高等的知识和文化,认识了家庭教育的重要性,很多很多的父母确实会考虑,如何生出养育出更好的孩子憨笑,跟他们更好的生活?采访了很多经验丰富的宝妈以下是我们整理出来的干看完北大学霸李雪琴的家教模式,我决定换个思路养娃赢得孩子的心最好的方式,不是靠拳头,也不是靠嘴巴。而是以身作则,跟孩子并肩长成两棵树,一起历经风霜雨雪,迎来朝霞晚霞,最终,让孩子明白尊重和陪伴的含义。作者可乐妈前段时间,无意间看抄书打卡第36天,心理成长的秘诀认知疗法只因在人群中多看了一眼,有人找到了心灵契合的姻缘,而有人造成了心理的抑郁。抄书打卡第36天,今天继续读到维尼老师的内心的重建,学习到什么是认知疗法?这就是今天摘抄的内容什么是认知疗小儿养护不得不煲的羊肚菌山药排骨汤很多宝妈呢,每天都想给小孩子补这个补那个。其实不需要那么复杂,今天呢我教大家一个既好吃又不麻烦的靓汤,包你小孩子喜欢喝!羊肚菌的好处非常多性平,味甘寒,无毒有益肠胃助消化化痰理气补我教孙子弟子规(二)天雅居小区内有个活动场所,小区里的人都把它叫做水泥地。到了晚上8点左右水泥地就成了孩子们的游乐场。围墙外是龙步西路,临路是一些商铺。这天晚上,一伙河南人和一伙湖南人不知因何在韵达快PC用户赶快升级Win11Moment1发布,大量功能更新之前微软已经正式发布了Windows年度更新补丁,也就是22H2的版本。这虽然是微软今年在系统上最重要的一次更新,但微软并没有将所有的新功能都放在一个版本上推送。就像微软说的一样,