版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Koa實戰(zhàn)- 方式(0:00-consthttp=require("http").createServer((req,res){if(req.url===}//觀 //:',)',oHeaderSet- consthttp=require("http")constsession={}.createServer((req,res)=>//觀 :',)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'} } 服務器在接受客戶端首次 時在服務器端創(chuàng)建sesion,然后保存ssio(我們可以將sesion保存在內(nèi)存中,也可以保存在eis中,推薦使用后者),然后給這個session個唯一的標識字符串然后在響應頭中種下這個唯一標識字符串。 下 哈希Hash-SHA--把一個不定 -xialaoshi->x4sdfdsafsdafl3s3-對稱koa中的session使用:npmikoa-session-////constkoa=require('koa')constapp=newkoa()constsession=require('koa-//簽名keykeys作用用來 進行簽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不僅僅支持簡單的key-vale類型的數(shù)據(jù),同時還提供st,st,zst,ash等數(shù)據(jù)結(jié)構的。Redis性能極高–Redis能讀的速度是110000次/s,寫的速度是81000次/s豐富的數(shù)據(jù)類型–Redis支持二進制案例的Strings,Lists,Hashes,Sets及OrderedSets數(shù)–Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個操豐富的特性–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該怎么辦跨域怎么辦 驗證成功后,服務端會簽發(fā)一個令牌(Token),再把這個Token客戶端收到Token以后可以把 起來,比如放 里或者LocalStorage客戶端每次向服務端請求資源的時候需要帶著服務端簽發(fā)的服務端收到請求,然后去驗證客戶端請求里面帶著的Token,如果驗證成功,就向客戶端返回請<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,如果存在的話,則每個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://設置tokenexp:Math.floor(Date.now()/1000)+60*)er-token",jwtAuth({asyncctx=>//驗證通過,state.userctx.body=message:"獲取數(shù)據(jù)成功userinfo:}sssion要求服務端信息,并且根據(jù)d能夠檢索,而toen不需要(因為信息就在toen中,這樣實現(xiàn)了服務端無狀態(tài)化)。在大規(guī)模系統(tǒng)中,對每個請求都檢索會話信息可能是一個復雜和耗時的過程。但另外一方面服務端要通過toen來解析用戶也需要定義好相應的協(xié)議(比如JWT)。 token的生成方式更加多樣化,可以由第模塊來提供。JWTJSONWEBTOKEN)原理解析(1:40:50-BearerToken包含三個組成部分:令牌頭、payload、哈希簽名:默認使用base64對ayload編碼,使用hs256算法對令牌頭、payload和密鑰進行簽名生成哈希////constsecret=' constopt=secret:'jwt_secret',key:'user'}constuser{username:'abc',password:'111111'}consttokenjsonwebtoken.sign({data://設置tokenexp:Math.floor(Date.now()/1000)+(60*},console.log('生成token:'+//生成 :',jsonwebtoken.verify(token,secret,:{data:{username:'abc',password:'111111',}HMACHshMssageAuthenicionCode,散列消息鑒別碼,基于密鑰的Hsh算法的認證協(xié)議。消息鑒別碼實現(xiàn)鑒別的原理是,用公開函數(shù)和密鑰產(chǎn)生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數(shù)據(jù)塊,即AC,并將其加入到消息中,然后傳輸。接收方利用與發(fā)送方共享的密鑰進行鑒別認證等。按照RFC2045的定義,Bse64被定義為:Bs64內(nèi)容傳送編碼被設計用來把任意序列的描述為一種不易直接識別的形式。(TeBase64otntasfr-Enoingisesignedtoesentiysequencesfoctsinamhtneedotbehumanlyedal.)常見于郵件、htt加密,截取htt信息,你就會發(fā)現(xiàn)登錄操作的用戶名、字段通過BASE64編碼的 阮一峰JWT解釋 OAuth(開放)(1:55:30-概述:登入主要基于Auth20。Aut協(xié)議為用戶資源的提供了一個安全的、開放而又簡易的標準。與以往的方式不同之處是AUH的不會使第觸及到用戶的帳號信息(如用戶名與),即第無需使用用戶的用戶名與就可以申請獲得該用戶資源的,因此AUH是安全的。案例:OAuth<script<script<script<div<a/login'>login登錄接口constconstKoa=constrouter=require('koa-router')()conststatic=req
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶工程學院《數(shù)字系統(tǒng)設計技術》2023-2024學年第一學期期末試卷
- 鎮(zhèn)江市高等??茖W?!稊?shù)據(jù)挖掘基礎》2023-2024學年第一學期期末試卷
- 浙江交通職業(yè)技術學院《數(shù)據(jù)庫系統(tǒng)及應用實踐》2023-2024學年第一學期期末試卷
- 中國礦業(yè)大學(北京)《固體表面物理化學》2023-2024學年第一學期期末試卷
- 鄭州軌道工程職業(yè)學院《中外劇作家及作品研究》2023-2024學年第一學期期末試卷
- 運城職業(yè)技術大學《休閑學與休閑文化》2023-2024學年第一學期期末試卷
- 區(qū)域經(jīng)濟發(fā)展中的產(chǎn)業(yè)協(xié)同效應
- DB2201T 69-2024 哺乳母豬智能化飼喂技術規(guī)范
- 數(shù)學社團學習活動
- 房地產(chǎn)經(jīng)紀綜合能力-《房地產(chǎn)經(jīng)紀綜合能力》模擬試卷1
- GB/T 9978.5-2008建筑構件耐火試驗方法第5部分:承重水平分隔構件的特殊要求
- 上海紐約大學自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項目實施方案、供貨方案
- 2022年物流服務師職業(yè)技能競賽理論題庫(含答案)
- ?;钒踩僮饕?guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術規(guī)程
- 高邊坡施工危險源辨識及分析
- 中海地產(chǎn)設計管理程序
- 簡譜視唱15942
- 《城鎮(zhèn)燃氣設施運行、維護和搶修安全技術規(guī)程》(CJJ51-2006)
評論
0/150
提交評論