Token实现JWT身份认证
前言: 什么是token认证,举个生活中的例子,程序员难免都有职业病——腰椎炎、颈椎病。所以,咱们得去养生放松一下,第一次进去,别人会叫你靓仔;养生完了第二次进去,别人不认识你,还是叫你靓仔;第三次第四次还是靓仔;如果你第一次就办了会员卡就不一样了,别人就记住你的,第二次进去就是熊总了。再来看token令牌,第一次登录办卡了(把令牌存到本地),登录后的各种操作就不需要再次登陆了,后面去养生都知道是熊总来了(每次请求时将token放在请求头发送给服务器,令牌免登录)
1-Token介绍
- 1.为什么要有token?
- 默认情况下,HTTP是一个无状态协议,也就是说任何浏览器都可以访问服务器,但是服务器并不能知道浏览器到底是属于哪个用户的。
- 2.token是什么 : 认证令牌
-
token是一串经过加密之后的字符串,相当于是用户一种身份认证令牌。类似于古代的腰牌,现代的工牌。 见到这个牌子,服务器才知道你是自己人,才会把数据响应给你。
-
- 3.token应用 : 免登录
- 有了token之后,用户就不需要每一次访问网站都要先输入账号密码,才能拿到数据了。 而是只需要登录一次,以后拿着token,服务器就知道你是哪一个用户了。
2-Token工作流程
- 1.token工作流程介绍
token工作流程分为三个步骤
第一步: 用户发送登录请求
第二步:服务器响应token,客户端将token存储在本地
第三步: 登录之后的所有请求,用户都需要在请求头中发送token
3-使用axios拦截器来发送token
- 1.发送登录请求
- 2.服务器响应token,浏览器将token存储在本地
- 3.在request.js文件中,通过拦截器给每一个接口设置请求头发送token
axios拦截器code:
// 添加请求拦截器
axios.interceptors.request.use(
// config:请求报文信息
function(config) {
// 在发送请求之前做些什么
let token = localStorage.getItem('mytoken')
//如果有token则通过请求头的方式传递,没有token就不发
if (token) {
// config.headers请求报文头
config.headers.Authorization = token
}
return config
},
function(error) {
// 对请求错误做些什么
return Promise.reject(error)
}
)
// 添加响应拦截器
axios.interceptors.response.use(
function(response) {
// 对响应数据做点什么
return response
},
function(error) {
// 响应错误了,出错了
// 如果是状态码401,说明token认证失败( 没有token 或者 token过期导致错误都会出现401)
if (error.response.status == 401) {
alert('请重新登录')
window.parent.location.href = './login.html'
}
// 对响应错误做点什么
return Promise.reject(error)
}
)
4-退出登录功能
- index.html页面
/* 4.退出功能
(1)删除token
(2)跳转登录页
*/
document.querySelector('.logout').addEventListener('click',function(){
if ( confirm('确定要退出登录吗?') ) {
//(1) 销毁token
localStorage.removeItem('mytoken')
//(2) 跳转到登录页
location.href = './login.html'
}
})