一.针对于目前主流的Cookie+session验证以及token验证,二者都有利有弊。主要还是看应用场景以及个人决定来使用,在这里我们以token来讲解
二.简单的token实现步骤(这里的实例是基于用Vue开发和express框架还有element-ui组件库)
第一步:下载jsonwebtoken
第二步:再登陆页面上进行判断用户登陆情况,验证结束后,把查询成功的用户id存入,存入方法为
const jwt = require(‘jsonwebtoken’)
const token = jwt.sign({id:查询成功后该用户的id},通用掩码自行设置)
第三步:通过res.send(token),然后存入浏览器的本地缓存中
localStorage.token= res.data
第四步:设置axios的请求拦截器,将获取到的token设置到请求头中,设置方法为:config.headers.Authorization = localStorage.token,这里最好进行一下判断,判断本地缓存中是否存在token
第五步:设置express的中间件,在后端可以通过req.hedaers.authorization可以获取到请求头中的token
第六步:再后端对获取的到的token进行判断,通过jwt.verify(token,掩码),获取到解析后的数据,再对用户表进行匹配,如果存在,说明成功获取到了token
第七步:对请求头中的token和解压后的token,以及查询到的token进行判断,判断该token是否存在,token解压后的数据是否存在,判断查询后的数据是否存在,如果不存在,统统返回res.status(422).send({message:返回登陆页面})
第八步:这里需要用到axios中的拦截响应器:在报错的函数中设置提醒,这样方便对产生的错误进行用户提醒
第九步:还需要再后端设置一个错误处理函数:这样的目的是为了和拦截响应器一起使用
三.token相比于cookie的优势在于:
* 支持跨域访问: Cookie是不允许垮域访问的,token支持
* 无状态: token无状态,session有状态的
* 去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在 你的API被调用的时候, 你可以进行Token生成调用即可.
* 更适用于移动应用: Cookie不支持手机端访问的
* 性能: 在网络传输的过程中,性能更好
* 基于标准化: 你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在 多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如: Firebase,Google, Microsoft)