欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > flask+vue使用jwt验证

flask+vue使用jwt验证

2025/11/9 22:50:00 来源:https://blog.csdn.net/leyouBaloy/article/details/143802756  浏览:    关键词:flask+vue使用jwt验证

为什么要使用jwt验证?

jwt(json web token)主要用来解决单点登录(SSO)问题。设想一个场景,你在淘宝登录了你的账号,然后打开天猫(天猫属于淘宝的子网站),那么你需不需要重新登录呢?答案是不用,你会发现天猫。在一个站点登录后,在其它子站点就不需要重复登录,这就是单点登录。

传统的方法用session解决,session保存在服务端,记录用户的登录信息。然而像淘宝这种大型网站往往有多个服务器,服务器之间需要session共享才能实现上述功能。

jwt能较好解决这个问题。用户登录完成后,由服务端签发一个token,包含了用户登录信息,过期时间等等。然后把它加密发给用户,用户下次请求的时候把它放在请求头传给服务端,服务端经过愉快的解密就可以知道用户已经登录啦!

在我的小项目当中,用户登录只需要密码,用session不好处理,所以也采用了jwt验证方法。

Flask后端代码

pip install pyjwt
import jwt
app.secret_key = b'secret_key'@app.route("/login", methods=["POST"])
def login():if request.method == 'POST':print("password",request.json['password'])token = jwt.encode({'exp': datetime.now(tz=timezone.utc) + timedelta(seconds=3600), 'password':request.json['password']}, current_app.config['SECRET_KEY'], algorithm="HS256") # 生成tokenprint(token)return jsonify(err="已生成token", token=token)# 装饰器函数
def login_required(func):@functools.wraps(func) # 修饰内层函数,防止当前装饰器去修改被装饰函数的属性def inner(*args, **kwargs):print("token",request.headers.get('token'),type(request.headers.get('token')))if request.headers.get('token')!='null':password = jwt.decode(request.headers.get('token'), current_app.config['SECRET_KEY'], algorithms="HS256")['password']# print(password)if password == '123':return func(*args, **kwargs)else:return jsonify(err="无效token")else:return jsonify(err="请输入密码")return inner

Vue前端代码

前端需要用到cookies,把token保存在浏览器里

npm install vue-cookies --save

main.js

import VueCookies from 'vue-cookies'
Vue.use(VueCookies)

app.js

created(){// 设置cookies 30天后过期this.$cookies.config('30d')// window objectwindow.$cookies.config('30d')}

保存token到cookies里

request.post('/login',{"password":value}).then(res=>{that.$cookies.set("token",res['token'])}

在请求头里携带token发送请求

request.post("/submit_edit",  this.form, {headers:{token: this.$cookies.get('token')}})

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词