保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

pythonFastapiOAuth2中的password流

  简单絮叨一些
  前面一篇文章唠了依赖项,今天主要唠下安全性。
  更多的就是身份认证或者授权等问题,一听这词就感觉很复杂,fastapi提供了专门处理安全性的工具
  安全性
  使用密码和Bearer的简单OAuth2
  此处使用的是OAuth2中的password流
  password流是OAuth2中定义的一种方式(流),用于处理安全和身份验证。
  OAuth2指在使后端或API可以独立于对用户进行身份验证的服务器。
  鉴于这个鬼玩意比较生疏,针对代码一段一段且一步一步的唠:fakeusersdb是定义了一个字典,就可以直接理解为是伪数据库,因为这些后期都是从数据库获取的fakeusersdb{johndoe:{username:johndoe,fullname:JohnDoe,email:johndoeexample。com,hashedpassword:fakehashedsecret,disabled:False,},alice:{username:alice,fullname:AliceWonderson,email:aliceexample。com,hashedpassword:fakehashedsecret2,disabled:True,},}这个就是new一个对象,不再多叙述appFastAPI()fakehashpassword(password:str):函数实际功能就是获取到字符串,然后进行拼接后再返回deffakehashpassword(password:str):returnfakehashedpasswordoauth2schemeOAuth2PasswordBearer(tokenUrltoken)就是new一个对象。而OAuth2PasswordBearer类是继承OAuth2规范的密码流获取令牌oauth2schemeOAuth2PasswordBearer(tokenUrltoken)创建的模型,它是继承基类BaseModelclassUser(BaseModel):username:stremail:Optional〔str〕Nonefullname:Optional〔str〕Nonedisabled:Optional〔bool〕None创建的模型,区别就是它继承的是User类classUserInDB(User):hashedpassword:strgetuser(db,username:str):函数的位置参数是,db是数据库,而username是指定用户的获取数据,实现功能就是,如果username在db中,就返回获取的数据信息,如果不在就直接返回None。单独运行下该函数:fakeusersdb{johndoe:{username:johndoe,fullname:JohnDoe,email:johndoeexample。com,hashedpassword:fakehashedsecret,disabled:False,},alice:{username:alice,fullname:AliceWonderson,email:aliceexample。com,hashedpassword:fakehashedsecret2,disabled:True,},}defgetuser(db,username:str):ifusernameindb:userdictdb〔username〕returnUserInDB(userdict)print(getuser(fakeusersdb,johndoe))
  运行结果E:venvPythonScriptspython。exeE:gitcodepythoncodefastapiProjectsafetymain。pyusernamejohndoeemailjohndoeexample。comfullnameJohnDoedisabledFalsehashedpasswordfakehashedsecretProcessfinishedwithexitcode0fakedecodetoken(token):实际就是实现了调用getuser函数的操作deffakedecodetoken(token):usergetuser(fakeusersdb,token)returnuserlogin接口:app。post(token)deflogin(formdata:OAuth2PasswordRequestFormDepends()):userdictfakeusersdb。get(formdata。username)ifnotuserdict:raiseHTTPException(statuscode400,detail3333333)userUserInDB(userdict)hashedpasswordfakehashpassword(formdata。password)ifnothashedpassworduser。hashedpassword:raiseHTTPException(statuscode400,detail444444)return{accesstoken:user。username,tokentype:bearer}formdata:OAuth2PasswordRequestFormDepends()声明依赖。因为OAuth2规范必须是请求表单,而OAuth2PasswordRequestForm是Fastapi提供的表单请求fakeusersdb。get(formdata。username)是根据表单传的username去到fakeusersdb字典中获取用户数据并赋值给userdictifnotuserdict:判断如果是空,则抛出异常UserInDB(userdict)是Pydantic提供的一个解包方法,解包成功后并赋值给user。例子如下:fromtypingimportOptionalfrompydanticimportBaseModelclassUser(BaseModel):username:stremail:Optional〔str〕Nonefullname:Optional〔str〕Nonedisabled:Optional〔bool〕Nonehashedpassword:struserdict{username:johndoe,fullname:JohnDoe,email:johndoeexample。com,hashedpassword:fakehashedsecret,disabled:False}userUser(userdict)print(user)
  运行结果E:venvPythonScriptspython。exeE:gitcodepythoncodefastapiProjecthashoauthmain。pyusernamejohndoeemailjohndoeexample。comfullnameJohnDoedisabledFalsehashedpasswordfakehashedsecretProcessfinishedwithexitcode0以userdict方式传给User,Python将对其进行解包。它会将userdict的键和值作为关键字参数直接传递。hashedpasswordfakehashpassword(formdata。password)获取到输入的密码,然后传给fakehashpassword函数,返回拼接的额密码ifnothashedpassworduser。hashedpassword:判断输入拼接的密码和fakeusersdb字典中指定用户的密码是否相等,如不相等就抛出异常return{accesstoken:user。username,tokentype:bearer}返回登录用户的信息
  10。getcurrentuser(token:strDepends(oauth2scheme)):函数,先声明依赖,其功能是根据调用fakedecodetoken函数获取用户信息,判断如果user存在就返回信息,否则就抛出异常defgetcurrentuser(token:strDepends(oauth2scheme)):userfakedecodetoken(token)ifnotuser:raiseHTTPException(statuscodestatus。HTTP401UNAUTHORIZED,detail333333,headers{WWWAuthenticate:Bearer},)returnuser
  11。getcurrentactiveuser(currentuser:UserDepends(getcurrentuser)):函数,先声明依赖,其主要功能是如果currentuser中的disabled为True就抛出异常,为False就返回用户信息defgetcurrentactiveuser(currentuser:UserDepends(getcurrentuser)):ifcurrentuser。disabled:raiseHTTPException(statuscode400,detail33333)returncurrentuser
  12。readitem接口:app。get(userme)defreaditem(current:UserDepends(getcurrentactiveuser)):returncurrentcurrent:UserDepends(getcurrentactiveuser)声明一个依赖,然后直接返回用户数据信息
  代码汇总如下:importuvicornfromfastapiimportFastAPIfromfastapiimportDependsfrompydanticimportBaseModelfromtypingimportOptionalfromfastapiimportHTTPException,statusfromfastapi。securityimportOAuth2PasswordBearer,OAuth2PasswordRequestFormfakeusersdb{johndoe:{username:johndoe,fullname:JohnDoe,email:johndoeexample。com,hashedpassword:fakehashedsecret,disabled:False,},alice:{username:alice,fullname:AliceWonderson,email:aliceexample。com,hashedpassword:fakehashedsecret2,disabled:True,},}appFastAPI()deffakehashpassword(password:str):returnfakehashedpasswordoauth2schemeOAuth2PasswordBearer(tokenUrltoken)classUser(BaseModel):username:stremail:Optional〔str〕Nonefullname:Optional〔str〕Nonedisabled:Optional〔bool〕NoneclassUserInDB(User):hashedpassword:strdefgetuser(db,username:str):ifusernameindb:userdictdb〔username〕returnUserInDB(userdict)deffakedecodetoken(token):usergetuser(fakeusersdb,token)returnuserdefgetcurrentuser(token:strDepends(oauth2scheme)):userfakedecodetoken(token)ifnotuser:raiseHTTPException(statuscodestatus。HTTP401UNAUTHORIZED,detail333333,headers{WWWAuthenticate:Bearer},)returnuserdefgetcurrentactiveuser(currentuser:UserDepends(getcurrentuser)):ifcurrentuser。disabled:raiseHTTPException(statuscode400,detail33333)returncurrentuserapp。post(token)deflogin(formdata:OAuth2PasswordRequestFormDepends()):userdictfakeusersdb。get(formdata。username)ifnotuserdict:raiseHTTPException(statuscode400,detail3333333)userUserInDB(userdict)hashedpasswordfakehashpassword(formdata。password)ifnothashedpassworduser。hashedpassword:raiseHTTPException(statuscode400,detail444444)return{accesstoken:user。username,tokentype:bearer}app。get(userme)defreaditem(current:UserDepends(getcurrentactiveuser)):returncurrentifnamemain:uvicorn。run(appsafetymain:app,reloadTrue,debugTrue)
  运行结果截图
  截图
  以上只是初略解读了使用密码获取令牌,后续还有一个使用哈希值的加密,靠着仅有的知识储备,如解读的有问题,还请私信留言,会及时探讨,谢谢!
  今天先聊到这里吧,以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;非常期待你的一键3连【点赞、收藏、分享】哟,谢谢!
  未完成,待续
  一直在努力,希望你也是!
  微信搜索公众号:就用python

争气啊!中国人!我曾在一本童话中读到:中国的老鼠吃的饱,美国老鼠肚子叫。一开始我还笑,但继续往下读我却皱起了眉头,因为这是说我们中国人铺张浪费的。书上说我们中国人点菜多,吃菜少,剩的多,……战胜困难战胜困难作者:黄埔小学6(2)班胡禹之笔名:极速传说、战胜困难是每个人必须面对的,在以往的岁月,或许你的人生是悲惨的,也可能是幸福的,但困难却是每个人需要克服……不可忘却的记忆作文600字在我的心里,一直都埋藏着一段不为人知的往事,我将永远不会忘记它。曾经的我,总是那么不可一世,以致于与别人就像有不公戴天的仇恨一样,那时的我,没有朋友,总是孤单一人,直到她……千年八月初三,残月如钩;天上地下,垂钓思愁。冷月的锋芒如泛着寒光、漾着雪影的绣花针,麻密若织、铺天盖地地刺下。刺在美人那白玉般晶润莹泽的冰肌上,也刺入她那软细柔绵的雪心里。疼痛,却……我最完美的艺术品十字绣六年级作文1200字艺术,是人们创造出来的,然而我所创造的艺术,就是那我认为完美的艺术品十字绣。五年级二课堂的时候,看见同学一直把头靠在桌沿上,手上拿着发亮的小东西往里面穿。我感到好奇,于是……在学校的一件趣事在学校的一件趣事又一个阳光明媚的早上来临了,我准备好一切,要上学了,在学校的楼道里,远远地听见我们班朗朗地读书声。我也和他们一起读。叮铃铃上课铃响了,第一节课是语文……我的梦作文700字在我很小很小的时候我就有很多很多的梦。1岁的梦:那是,我还是可爱的宝宝。大人们辛苦的工作,我也学着他们工作。看着妈妈做饭,我就用小沙子做饭,还觉得自己做的饭好香;看着爸爸……红旗漫卷西风观后感1500字红旗漫卷西风精彩影评《红旗漫卷西风》全剧以西北革命根据地的建立者和革命先驱为原型,表现了ldquo;西北革命之火燎原全国rdquo;的革命历史。今天小编在这分享一些红旗漫卷西风观后感给大家,欢迎大……美丽的七里河作文400字七里河是我们休闲娱乐的好去处。春天,河边的柳树冒出了嫩芽,映得河水更加碧绿清澈了。河里的小鱼藏了一冬天,现在它们快活地游着。北岸健身道路两旁的花花草草也都睡醒了,桃花的红……测试工程师面试,接口测试问题总结1、什么是接口?2、什么是接口测试?3、接口组成的要素有哪些?4、Python的requests包是干什么的?5、如何使用Python的requests……关于开学的作文莫泊桑说:人生活在希望之中,一个希望破灭了或实现了,就会有新的希望产生。新春就是新的企盼、新的希望,新的征程,新的收获。新学期,新起点,新面貌,让我们憧憬更美好的明天,让我们再……无题E度网专稿未经允许不得转载你可以一天上九节课两节晚自习,你可以一天写完两支笔芯做至少三套卷子,你可以早起十分钟晚睡十分钟记几个单词和成语,你可以用玩手机的时间弄懂一道数学……
每天都是一首诗作文600字除了一个现实的此生之外,人们应该还拥有一个诗意的世界,正是如此,如果生活中没有诗,便会单调乏味。波涛汹涌的江边,站着一个人,他一生多次出仕,也多次被贬,最终还因文笔太好搞……和妈妈一起打羽毛球作文和妈妈一起打羽毛球作文今天,我吃完饭,拿好球拍,和妈妈一起打羽毛球去。打了近40个球,一个老奶奶带着一个小妹妹过来了,没想到小妹妹很喜欢看球,一直坐在边上的自行车凳……那件小事真不小作文范文人生的旅途中,总有些事情,哪怕是件小事,也能给人留下深刻的印象,甚至影响你的一生,它们犹如珍珠,永远在记忆的海洋里闪闪发光。铅云收拢起来,形成一座座小山,天空变得阴沉灰暗……把梦想留给黎明作文因为想要飞翔,虫子把梦想留给了缚住自己的茧。因为想要自由,海燕把梦想留给了暴风雨的夜。因为想要永生,凤凰把梦想留给了香木的雄雄烈火。因为想要愿望成真,我把梦想……人性的光辉那是一个雨天,我急急忙忙地骑着自行车,往家的方向赶。路上行人很少。当我通过一条小巷时,我却撞上了一个人,把她撞了个趔趄。她连忙扶住墙才站稳,幸好没摔着。隔着蒙蒙细雨,我打量着这……所谓沉默是金常言沉默是金。何谓沉默?古义中一说闲静,二为不语。说沉默是闲静,并不难理解。而不语却并不等于无言,它是一种积蓄、酝酿,以等猝发的过程。就如同拉弓蓄力,为的是箭发时能……最美的礼物记叙文范文(精选3篇)相信大家都不可避免地要接触到作文吧,尤其作为作文里的重要分类的记叙文,记叙文的六要素是指:时间、地点、人物、事件(经过)、原因、结果等。我们应该怎么写这类型的作文呢?以下是小编……习惯的作文200字写作,是运用语言文字符号,反映客观事物、表达思想感情、传递知识信息的创造性脑力劳动过程。下面小编为大家分享习惯的作文200字,欢迎大家参考借鉴。习惯的作文200字一每个人……有关暑假趣事日记范文6篇暑假趣事日记篇1炎炎夏日,我打了个哈欠,伸了个懒腰迎接我的新一天,刚起床的我还有点迷迷糊糊,听见妈妈说今天,天气有点热,我们一家人去游泳吧。神志不清的我立刻清醒过来了,时……我的好朋友王胖胖小学作文王胖胖是我的好朋友,这可不是他的真名哦!不过,胖胖对他来说真的是名副其实。他比我低两个年级,但比我高半个头,体重是我的两倍,他的头形很可爱,就像一个土豆架在他那宽厚的肩膀上。……大蜗牛品学网专稿未经允许不得转载我家有一只可爱的大蜗牛,它是妈妈买菜时发现的,我把它放在一个装有新鲜青菜的盒子里养着。蜗牛的背上有个重重壳,那是它的房子。它有一对长长的触……安卓手机的通病,99的原因都是因为它想请问下各位用安卓手机的用户,你们都是因为什么原因而换手机的。多久换一次手机呢?我的手机用了3年了,安卓机一台。内存128G的,最近开始提示储存空间不足了,请及时清理内存……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网