版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Koa實(shí)戰(zhàn)- 方式(0:00-consthttp=require("http").createServer((req,res){if(req.url===}//觀(guān) //:',)',oHeaderSet- consthttp=require("http")constsession={}.createServer((req,res)=>//觀(guān) :',)constsessionKey='sid' .indexOf(sessionKey)>-1){res.end('ComeBack')//constpattern=newRegExp(`${sessionKey}=([^;]+);?\s*`)constsid=pattern.exec( consoleconsole.log('session:',sid,session}elseconstsid=(Math.random() ',`${sessionKey}=${sid};`)session[sid]={name:'laowang'} } 服務(wù)器在接受客戶(hù)端首次 時(shí)在服務(wù)器端創(chuàng)建sesion,然后保存ssio(我們可以將sesion保存在內(nèi)存中,也可以保存在eis中,推薦使用后者),然后給這個(gè)session個(gè)唯一的標(biāo)識(shí)字符串然后在響應(yīng)頭中種下這個(gè)唯一標(biāo)識(shí)字符串。 下 哈希Hash-SHA--把一個(gè)不定 -xialaoshi->x4sdfdsafsdafl3s3-對(duì)稱(chēng)koa中的session使用:npmikoa-session-////constkoa=require('koa')constapp=newkoa()constsession=require('koa-//簽名keykeys作用用來(lái) 進(jìn)行簽app.keys=['someconstSESS_CONFIG={key:'kkb:sess', //httpOnly:true,//signed:true,//app.use(session(SESS_CONFIG,//app.use(ctx=>if(ctx.path==='/favicon.ico')//letn=ctx.session.count||//ctx.session.count=++n;ctx.body='第'+n+'次 rediseis使用。Ris不僅僅支持簡(jiǎn)單的key-vale類(lèi)型的數(shù)據(jù),同時(shí)還提供st,st,zst,ash等數(shù)據(jù)結(jié)構(gòu)的。Redis性能極高–Redis能讀的速度是110000次/s,寫(xiě)的速度是81000次/s豐富的數(shù)據(jù)類(lèi)型–Redis支持二進(jìn)制案例的Strings,Lists,Hashes,Sets及OrderedSets數(shù)–Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個(gè)操豐富的特性–Redis還支持publish/subscribe,通知,key////constredis==o','Thisisao',function{console.log("redisgetnpmi-Skoa-////koa-constredisStore=require('koa-redis');constredis=require('redis')const = (6379,constwrapper=require('co-redis'); =wrapper(redis store: })//},app.use(async(ctx,next)=>constkeys=await keys.forEach(asynckey=> )await為什么要將 ////<scriptsrc="<script <div<inputv-<inputv-<buttonv-<buttonv-<buttonv-<buttononclick=".geementById('log').innerHTML=''">Clear<h6axios.defaults.withCredentials=trueresponsereturnresponse;}varapp=Vue({el:'#app',data:{username:'test',password:'test'methods:asynclogin()await{username:this.username,password:this.passwordasynclogout()awaitasyncgetUser()await}}constKoa=constrouter=require('koa-router')()constsession=require('koa-session')constcors=require('koa2-cors')constbodyParser=require('koa-bodyparser')conststatic=require('koa-static')constapp=newcredentials:app.keys=['someapp.use(static(dirname+'/'));app.use((ctx,next)=>if(ctx.url.indexOf('login')>-{}elseconsole.log('session',ctx.session.userinfo)if(!ctx.session.userinfo){ctx.body=message:"登錄失敗}}else}}router.post('/users/login',async(ctx){const}=ctx.requestctx.session.userinfo=body.username;ctx.body={message:"登錄成功}router.post('/users/logout',async(ctx)=>deletectx.session.userinfoctx.body={message:"登出系統(tǒng)}router.get('/users/getUser',async(ctx){ctx.body=message:"獲取數(shù)據(jù)成功userinfo:}} 不靈活如果APP該怎么辦跨域怎么辦 驗(yàn)證成功后,服務(wù)端會(huì)簽發(fā)一個(gè)令牌(Token),再把這個(gè)Token客戶(hù)端收到Token以后可以把 起來(lái),比如放 里或者LocalStorage客戶(hù)端每次向服務(wù)端請(qǐng)求資源的時(shí)候需要帶著服務(wù)端簽發(fā)的服務(wù)端收到請(qǐng)求,然后去驗(yàn)證客戶(hù)端請(qǐng)求里面帶著的Token,如果驗(yàn)證成功,就向客戶(hù)端返回請(qǐng)<scriptsrc="<script <div<inputv-model="username"<inputv-model="password"<buttonv-<buttonv-<buttonv-<button@click="logs=[]">Clear<!--日志<liv-for="(log,idx)inlogs"{{logconfig=>if(token){//判斷是否存在token,如果存在的話(huà),則每個(gè)httpheader都加上//Bearer是JWTmon["Authorization"]="Bearer"+}returnerr=>return}se=>{returnresponse;err{return}varvarapp=newVue({el:"#app",data:{logs:[]methods:login:asyncfunction()constres=awaitaxios.post("/users/login-{username:this.username,password:this.passwordlocalStorage.setItem("token",logout:async{getUser:asyncfunction()awaitaxios.get("/users/getUser-}}npmijsonwebtokenkoa-jwt-constconstKoa=constrouter=require('koa-constjwt=require("jsonwebtoken")constjwtAuth=require("koa-jwt")constsecret="it'sasecret"constcors=require('koa2-cors')constbodyParser=require('koa-bodyparser')conststatic=require('koa-static')constapp=newKoa();app.keys=['somesecret'];app.use(static(dirname+'/'));router.post("/users/login-token",asyncctx{const{body}=constuserinfo=body.username;ctx.body={message:"登錄成功user:////生成tokentoken:{data://設(shè)置tokenexp:Math.floor(Date.now()/1000)+60*)er-token",jwtAuth({asyncctx=>//驗(yàn)證通過(guò),state.userctx.body=message:"獲取數(shù)據(jù)成功userinfo:}sssion要求服務(wù)端信息,并且根據(jù)d能夠檢索,而toen不需要(因?yàn)樾畔⒕驮趖oen中,這樣實(shí)現(xiàn)了服務(wù)端無(wú)狀態(tài)化)。在大規(guī)模系統(tǒng)中,對(duì)每個(gè)請(qǐng)求都檢索會(huì)話(huà)信息可能是一個(gè)復(fù)雜和耗時(shí)的過(guò)程。但另外一方面服務(wù)端要通過(guò)toen來(lái)解析用戶(hù)也需要定義好相應(yīng)的協(xié)議(比如JWT)。 token的生成方式更加多樣化,可以由第模塊來(lái)提供。JWTJSONWEBTOKEN)原理解析(1:40:50-BearerToken包含三個(gè)組成部分:令牌頭、payload、哈希簽名:默認(rèn)使用base64對(duì)ayload編碼,使用hs256算法對(duì)令牌頭、payload和密鑰進(jìn)行簽名生成哈希////constsecret=' constopt=secret:'jwt_secret',key:'user'}constuser{username:'abc',password:'111111'}consttokenjsonwebtoken.sign({data://設(shè)置tokenexp:Math.floor(Date.now()/1000)+(60*},console.log('生成token:'+//生成 :',jsonwebtoken.verify(token,secret,:{data:{username:'abc',password:'111111',}HMACHshMssageAuthenicionCode,散列消息鑒別碼,基于密鑰的Hsh算法的認(rèn)證協(xié)議。消息鑒別碼實(shí)現(xiàn)鑒別的原理是,用公開(kāi)函數(shù)和密鑰產(chǎn)生一個(gè)固定長(zhǎng)度的值作為認(rèn)證標(biāo)識(shí),用這個(gè)標(biāo)識(shí)鑒別消息的完整性。使用一個(gè)密鑰生成一個(gè)固定大小的小數(shù)據(jù)塊,即AC,并將其加入到消息中,然后傳輸。接收方利用與發(fā)送方共享的密鑰進(jìn)行鑒別認(rèn)證等。按照RFC2045的定義,Bse64被定義為:Bs64內(nèi)容傳送編碼被設(shè)計(jì)用來(lái)把任意序列的描述為一種不易直接識(shí)別的形式。(TeBase64otntasfr-Enoingisesignedtoesentiysequencesfoctsinamhtneedotbehumanlyedal.)常見(jiàn)于郵件、htt加密,截取htt信息,你就會(huì)發(fā)現(xiàn)登錄操作的用戶(hù)名、字段通過(guò)BASE64編碼的 阮一峰JWT解釋 OAuth(開(kāi)放)(1:55:30-概述:登入主要基于A(yíng)uth20。Aut協(xié)議為用戶(hù)資源的提供了一個(gè)安全的、開(kāi)放而又簡(jiǎn)易的標(biāo)準(zhǔn)。與以往的方式不同之處是AUH的不會(huì)使第觸及到用戶(hù)的帳號(hào)信息(如用戶(hù)名與),即第無(wú)需使用用戶(hù)的用戶(hù)名與就可以申請(qǐng)獲得該用戶(hù)資源的,因此AUH是安全的。案例:OAuth<script<script<script<div<a/login'>login登錄接口constconstKoa=constrouter=require('koa-router')()conststatic=req
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版游戲版權(quán)采購(gòu)合同示范文本3篇
- 湘潭大學(xué)《體育基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版經(jīng)營(yíng)權(quán)作抵押借款協(xié)議樣例版B版
- 二零二五版戶(hù)外廣告資源代理合作框架協(xié)議3篇
- 2024消防設(shè)備研發(fā)與制造合同范本3篇
- 二零二五年度藝術(shù)品收藏交易合同3篇
- 2025年度智慧養(yǎng)老服務(wù)平臺(tái)建設(shè)與運(yùn)營(yíng)合同3篇
- 桐城師范高等專(zhuān)科學(xué)?!侗硌莼A(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版板房租賃合同含物業(yè)管理及保潔服務(wù)3篇
- 四川文軒職業(yè)學(xué)院《機(jī)械工程材料B》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海紐約大學(xué)自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 2022年物流服務(wù)師職業(yè)技能競(jìng)賽理論題庫(kù)(含答案)
- 危化品安全操作規(guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術(shù)規(guī)程
- 高邊坡施工危險(xiǎn)源辨識(shí)及分析
- 中海地產(chǎn)設(shè)計(jì)管理程序
- 簡(jiǎn)譜視唱15942
- 《城鎮(zhèn)燃?xì)庠O(shè)施運(yùn)行、維護(hù)和搶修安全技術(shù)規(guī)程》(CJJ51-2006)
- 項(xiàng)目付款審核流程(visio流程圖)
評(píng)論
0/150
提交評(píng)論