版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Koa实战课程目标掌握三种常见鉴权方式:Ses/、Token、OAuthses原理-方式实现原理:1. 服务器在接受客户端首次时在服务器端创建see,然后保存see(可以将see保存在内存中,也可以保存在redis中,响应头中种下这个唯一标识字符串。使用后者),然后给这个ses生成一个唯一的标识字符串,然后在2. 签名。这一步通过秘钥对sid进行签名处理,避免客户端修改sid。(非必需步骤)3. 浏览器中收到请求响应的时候会响应头,然后将sid保存在本地信息,中,浏览器在下次http请求的请求头中会带上该下的4. 服务器在接受客户端请求时会去请求头中的sid,然后根据这个sid去找服务器端保存
2、的该客户端的ses,然后判断该请求是否合法。koa中的ses使用: npm i koa-ses-Sapp.keys = some secret, another secret;const SESS_CONFIG = key: kkb:sess, maxAge: 86400000, httpOnly: true, signed: true,;app.use(ses(SESS_CONFIG, app);app.use(ctx = if (ctx.path = /favicon.ico) return; let n = ctx.ses.count | 0;ctx.ses.count = +n;ctx
3、.body = 第 + n + 次);使用redisses安装: npm i -S koa-redis配置使用:案例:通过ses实现用户鉴权登录页面,./public/login.htmlconst redisStore = require(koa-redis); const redis = require(redis)const cnt = redis.createCnt(6379, localhost);app.use(ses(key:kkb:sess,store: redisStore(cnt), app);app.use(ctx = /.cnt.keys(*,(err,keys)= c
4、onsole.log(keys); keys.forEach(key=cnt.get(key,(err,val)= console.log(val););input v-minput v-m=username /=password /buttonbuttonbuttonbuttonclick=loginLoginclick=logoutLogout click=getUserGetUserclick=logs=Clear Log log axios.defaults.withCredentials = true;axios.erceptors.response.use(response = a
5、pp.logs.push(JSON.stringify(response.data); return response;);var app = new el: #app, data: username: password: logs: ,methods: Vue(test,test,login: async function() await axios. username: password:);,logout: asynct(/users/login, this.username,this.passwordfunction() await axios.t(/users/logout);,ge
6、tUser: async function() await axios.get(/users/getUser););登录/注销接口,./routes/users.js路由守卫中间件,./middleware/auth.js应用守卫,./routes/users.jsrouter.get(/getUser, require(./middleware/auth),async ctx = .)Token 验证原理module.exports = async (ctx, next) = if (!ctx.ses.userinfo) ctx.body = ok: 0,message: 用户未登录; el
7、se await next();routost(/login, async ctx = const body = ctx.request; console.log(body, body);ctx.ses.userinfo = body.username; ctx.body = ok: 1,message: 登录成功;);routost(/logout, async ctx = delete ctx.ses.userinfo; ctx.body = ok: 1,message: 登出系统;);router.get(/getUser, async ctx = ctx.body = ok: 1,me
8、ssage: 获取数据成功, userinfo: ctx.ses.userinfo;);案例:令牌认证登录页,public/logoken.htmlLoginLogoutGetUserClear Log log axios.erceptors.request.use(config = const token = window.localStorage.getItem(token);if (token) / 判断是否存在token,如果存在的话,则每个http header都加上token/ Bearer是JWT的认证头部信息monAuthorization = Bearer + token;r
9、eturn config;,err = return Promise.reject(err););axios.erceptors.response.use(response = app.logs.push(JSON.stringify(response.data); return response;,err = app.logs.push(JSON.stringify(response.data); return Promise.reject(err););var app = new Vue( el: #app, data: username: test, password: test, lo
10、gs: ,methods: login: async function() const res = await axios.username: this.username, password: this.password);t(/users/logoken, localStorage.setItem(token, res.da,logout: async function() localStorage.removeItem(token);,getUser: async function() await axios.get(/users/getUser-token);oken););登录接口安装
11、依赖: npm i jsonwebtoken koa-jwt -S接口编写,routes/users.jsOAuth(开放)概述:登入主要基于OAuth 2.0。OAuth协议为用户资源的提供了一个安全的、开放而又简易的标准。与以往的方式不同之处是OAUTH的不会使第触及到用户的帐号信息(如用户名与),即第无需使用用户的用户名与就可以申请获得该用户资源的,因此OAUTH是安全的。OAuth登录流程const jwt = require(jsonwebtoken); const jwtAuth = require(koa-jwt); const secret = its a secret;rou
12、tost(/logoken, async ctx = const body = ctx.request;const userinfo = body.username; ctx.body = message: 登录成功, user: userinfo,token: jwt.sign(data: userinfo,exp: Math.floor(Date.now() / 1000) + 60 * 60 /一小时后过期,secret););router.get( /getUser-token, jwtAuth(secret),async ctx = /获取ses ctx.body = message
13、: 获取数据成功,userinfo: ctx.se.user.data;);案例:OAuth登录登录页面,login-oauth.html登录接口,routes/users.jsconst cc;const constconfig = nt_id: a141111525bac2f1edf2,nt_secret: 8e37306c1451e60412754ace80edee4ca937564aaxios = require(axios)querystring = require(querystring)router.get(/login-, async ctx = /重定向到认证接口,并配置参数OAuth登录const path = nt_id=$config.c/login/oauuthorize?cnt_id;/转发到服务器ctx.redirect(path););router.get(/oauth/callback, async ctx = const const cccode = paramsnt_id:ctx.query.code;= t_id,nt_secret: t_secret,code:;let res c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年武汉市新洲区中小学教师招聘笔试备考试题及答案解析
- 佳木斯大学2026年公开招聘工作人员191人备考题库及1套完整答案详解
- 2025年北京经济技术开发区第一小学公开招聘聘任制教师17人备考题库及参考答案详解1套
- 深投控资产管理专员岗位面试题库含答案
- 2025年横峰县中小学教师招聘笔试参考试题及答案解析
- 5S管理主管面试题及答案
- 2025年枣庄市中小学教师招聘笔试参考试题及答案解析
- 2025年保定市中小学教师招聘笔试参考题库及答案解析
- 叶圣陶先生三事课件
- 和时间赛跑课件名师
- 2025年沈阳华晨专用车有限公司公开招聘参考笔试题库及答案解析
- 2025年投融资岗位笔试试题及答案
- 烤房转让合同范本
- (一诊)达州市2026届高三第一次诊断性测试历史试题(含答案)
- 《汽车网络与新媒体营销》期末考试复习题库(附答案)
- 外一骨科年终总结
- 走遍天下书为伴侣课件
- 2025四川成都东部新区招聘编外工作人员29人笔试考试参考题库及答案解析
- 辅警笔试题库及答案临沂
- (已瘦身)(新教材)2025年部编人教版三年级上册语文全册期末复习单元复习课件
- 2026中国人民银行直属事业单位招聘60人笔试备考试卷带答案解析
评论
0/150
提交评论