发布时间:2023-05-26 16:20:19
1.用户输入账号密码进行登录操作,明逗登录成功后,服务器返回一个token给客户端激悔卖
2.客户端收到数据后保存在客户端中
3.客户端每次访问API都是携带token到服务器中
4.服务器采用filter过滤校验,校验成功则返回请求数据,校验失败则返回错误密码
1.无状态、可扩展
在客户端存储token是无状态的,并且能前含够被扩展。基于这种无状态和不存储Session信息,负载均衡器能够将用户信息从一个服务器穿到另一个服务器中
在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下:
1、用户输入账号密码,前端调后端的登陆接口,发送用户名和密码,
2、后端收到请求,验证用户名和密码,验证通过后(即登录成弯则功),后端返回token给前端;
3、前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面;
4、前端每次跳转路由,都要判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面( 通过router.beforeEach((to, from, next)={.....}))
5、每次调后端接口,都要在请求头中加上token;
6、后端判断请求头中有无token,有token,就拿到token并验证token,验铅拿证成功就返回数据,埋激棚验证失败(例如:token过期)就返回编码401(编码由前台和后台约定好),请求头中没有token也返回编码401;
7、如果前端拿到状态码为401,则清除token信息并跳转到登录页面,并弹框提示用户当前缺少token或者token已失效,请重新登录;
一、调登录接口成功,在回调函数中将token存储到localStorage和vuex中
login.vue
store文件夹下的index.js
二、路由导航守卫
main.js
三、请求头加token,如果前端拿到状态码为401,就清除token信息并跳转到登录页面
前言橡返
有些登录不是用cookie来验证的,是用token参数来游如轿判断是否登录。
token传参有两种一种是放在请求头里,本质上是跟cookie是一样的神肆,只是换个单词而已;另外一种是在url请求参数里,这种更直观。
一、登录返回token
1.如下图的这个登录,无cookies
2.但是登录成功后有返回token
二、请求头带token
1.登录成功后继续操作其它页面,发现post请求的请求头,都会带token参数
2.这种请求其实比cookie更简单,直接把登录后的token放到头部就行
三、token关联
1.用脚本实现登录,获取token参数,获取后传参到请求头就可以了
2.如果登录有验证码,前面的脚本登录步骤就省略了,自己手动登录后获取token
import requests
header = { # 登录抓包获取的头部
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
"Accept": " / ",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Content-Length": "423",
"Connection": "keep-alive"
}
body = {"key1": "value1",
"key2": "value2"} # 这里账号密码就是抓包的数据
s = requests.session()
login_url = " " # 自己找带token网址
login_ret = s.post(login_url, headers=header, data=body)
token = login_ret.json()["token"]
post_url = " "
header["token"] = token
header["Content-Length"]="9"
body1 = {
"key": "value"
}
post_ret = s.post(post_url, headers=header, data=body1)
print post_ret.content