nodejs安装及环境配置Mac(node.js — 身份认证)
请问昨天结束的早是对堆积在了今天吗 ,今天还来加个班更博 ,看在这个毅力的份上能否给亿点点推荐 。
有个好消息有个坏消息 ,先说坏消息吧 ,就是在这么学下去我急需急支糖浆 ,来回顾回顾前面的知识 ,这几天学的太急了 ,搞得有点推着走的意思 ,好消息就是今天的内容是最后最后node的基础内容了 ,果然天不负我,整完然后有两个大案例 ,做完我就从上次复习那里开始一直复习过来 ,然后全部不欠账,就昂首挺胸的走进vue了 ,等等 ,这个学完可以进去了吧 。
1.
今天的第一个内容说一下web开发模式,今天基本就是讲一个身份认证的内容 ,我们的web开发模式呢分为两种 ,一种是服务器渲染模式 ,就是通过服务器进行一个字符串拼接 ,将html页面拼接出来 ,然后直接返回给客户端 ,这样一来就不需要我们的ajax了 ,直接给客户端就可以了 ,他的优点呢就是前端耗时少 ,毕竟都给服务器做了还有前端什么事,还有他也有利于seo优化 ,他的缺点就是占用服务器资源 ,而且不利于前后端分离开发效率低。
第二个模式:前后端分离的模式,它是依赖于ajax的一个广泛应用 ,后端负责编写api接口 ,前端就负责调用接口就完事了 。他的一个优点就是开发体验好 、毕竟前后端分离,用户体验也好 ,也减轻了服务器的压力 。
但是缺点就是不利于seo的优化 。
2
然后我们进入身份认证 、
什么事身份认证?
通过一定的手段对用户身份进行确认的方式 。
服务器渲染开发用的就是session认证 ,而我们的前后端分离用的就是jwt认证 ,两者都各有各的优点谁也不让谁 。
3.
先来说下session吧
首先了解一下http无状态性 ,就是指客户端每次的http请求都是独立的 ,连续多个请求间没有直接关系 ,服务器也不会主动保留每次http请求状态(就像收银员他能记住每个来的客户是会员吗?)
突破无状态限制 。
超市突破这种限制的方式就是给每个会员发会员卡是吧 ,在我们web领域这种方式就是cookie 。
cookie ,是存储在用户浏览器一段不超过4kb的字符串 ,它是由name、value以及有效期 。安全性,适用范围的可选属性组成 ,在不同的域名下 ,我们的cookie是各自独立的,每当客户端发起请求 ,会自动把当前域名下的所有cookie发给服务器 ,注意只是当前域名下 。
他的特性就是:自动发送 、域名独立 、过期时限 、4kb限制
3.1
cookie在身份认证中的作用
当我们客户端第一次请求服务器的时候,服务器会通过响应头向客户端发送一个身份认证的cookie ,我们的浏览器就会把这个cookie存储起来 ,当我们下一次 请求的时候 ,就会直接发送这个cookie也就是前面说的会自动发送 ,即可证明身份。
要注意我们的cookie是不具有安全性的 ,浏览器还提供了读写cookie的api ,所以cookie很容易被伪造 ,就像我们的会员卡也有伪造的一样 。所以不要用cookie存储重要数据 ,包括我们jwt也不能存后面会说到 。
3.2
那么有没有方法来提高我们cookie的安全性呢?
那就是session认证 ,就好比我们的会员卡➕刷卡的机制就能破除伪造卡了。
session认证机制:
首先我们的客户端登录账号密码发送了登录请求,服务器会开始验证 ,当验证成功后 ,会将其存储在服务器的内存中,同时通过响应头返回一个对应的cookie字符串 ,我们的浏览器就会把这个字符串保存在当前域名下 ,当我们再次请求的时候,就会把域名下所有cookie一起发送服务器 ,服务器就会去找对只对应的cookie匹配成功就能找到你信息了 ,然后就认证成功了
3.3
说了这么多怎么来再服务器端使用我们的sesson ,首先安装导入两部曲然后还需要配置 ,注意配置是固定写法 ,secret是可以为任意字符串的 。
配置过后就可以用req.session来访问session对象了 ,将我们的一些数据用sessin存储起来 ,然后登陆成功又可以通过session取出来 ,当我们退出登录还可以 。destroy方法清空session ,注意只是清空这个账户信息,不会清空别人的信息 ,具体代码如下:
注意看todo也就是我们要做的
3.
这就是session ,然后我们看到下一个认证机制jwt,session需要cookie才能够实现是吧 ,但我们的cookie有一个致命问题 ,不支持跨域,如果涉及到跨域需要配置很大一堆步骤。
JWT目前最流行跨域认证解决方案 。
实现原理:首先还是客户端发起一个请求头发送账号密码 ,服务器验证 ,验证成功后会经过加密生辰一个token字符串然后会给你返回一个token字符串 ,我们拿到这个token字符串会将其存储在localstorage或者sessionStorage中 ,当我们再次请求就会通过一个authorization的请求头将token发送给服务器 ,服务器拿到token就会将他还原成用户的信息对象 ,然后身份也就认证成功了 。
JWT的组成部分是有三部分组成:header 。patyload 。signature ,这个 。只是分割作用 ,我们的真正信息重在中间的payload前后两个只是保证token的安全性 。
怎么在express中来使用我们的token?
需要安装两个包 ,还需要定义密匙是自己自定义的
第四步生成JWT字符串的时候在sign这个方法里面,这个配置有效期是token在规定期限之内能够拿来验证的期限;
第五步将jwt转换为json这个语句当中 ,unless这个语句的意思是不需要身份验证的接口
配置完第五步转换为json文件后我们就可以用req.user来获取信息了 ,而这个信息就是我们第四步把什么转换为jwt字符串的信息,
最后当我们的token过期或者不合法就会出现错误 ,这个时候要需要一个错误中间件
然后后面会有两个项目 ,会把之前所学的node综合起来 ,我到时候单独开个博来说一下吧 ,还是有一些注意事项的
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!