前言
python是我们常见的以及最简单的编程语言之一,它拥有很多的三方模块,下面介绍jwt token的应用
一、jwt token 是什么?
jwt token 是登入时最常见的会话保持,由三部分组成,分别是头部(header)、payload 这部分存储用户的id,用户名等等信息,不推荐存储敏感信息,最后一部分是签名部分,是吧前两部分进行Bs64编码,生成第三部分,然后将三部分一‘.’号组成一个完整的token
二、使用步骤
1.在登入的视图类中使用静态方法封装token
代码如下:
import jwt
import time
@staticmethod
def token(user):
# payload 为一个字典,token的第二部分,存储用户名、id等等,不要存储敏感数据
# 'exp'是一个默认可以设置过期失效,用现在的时间戳,加上要让token存在多长时间
payload = {
'id':user.id,
'username':user.username,
'exp':time.time() + 9999
}
# key 是一个随机码,相当于给加密加盐,是加密数据更加不容易被破解
key = current_app.config.get('SECRET_KEY')
token = jwt.encode(payload,key=key,algorithm='HS256')
return token
2.整个登入视图
# MD5加密
def encryption(password):
import hashlib # 内置的模块
md5 = hashlib.md5() # 实例化md5对象
md5.update(password.encode('utf-8')) # 将密码转换为字节码格式
sign = md5.hexdigest()
print(sign)
return sign
# 类视图 基于flask框架实现
class LoginView(Resource):
# 注册及登入
def post(self):
# 接受前端数据
req = reqparse.RequestParser()
# 接受用户名
req.add_argument('username')
# 接受密码
req.add_argument('password')
deng = req.parse_args()
# 判断数据是否接受到
if not all([deng['username'],deng['password']]):
return jsonify({
'code':400,
'msg':'接受的数据为空'
})
# 判断此用户是否存在
user = UserModel.query.filter(UserModel.username == deng['username']).first()
# 判断如果不存在,就进行新用户的添加
if not user:
# 将密码进行加密
password = encryption(deng['password'])
# 说明没有此用户 进行注册
u = UserModel(username=deng['username'], password=password)
db.session.add(u)
db.session.commit()
# 此时,一定会有这个用户
users = UserModel.query.filter(UserModel.username == deng['username']).first()
# 判断密码是否正确
if users.password == encryption(deng['password']):
token = self.token(users)
return jsonify({
'code':200,
'msg':'登入成功',
'username':users.username,
'token':token
})
# token静态方法
@staticmethod
def token(user):
payload = {
'id':user.id,
'username':user.username,
'exp':time.time() + 9999
}
key = current_app.config.get('SECRET_KEY')
token = jwt.encode(payload,key=key,algorithm='HS256')
return token
3.jwt回话保持的流程
浏览器发起请求登陆,服务端验证身份,根据算法,将用户标识信息编码生成 token, 并且返回给浏览器做本地存储;下次请求时,把本地的 token 一起发送给服务器,服务器通过解码token,完成用户的身份认证。
本文介绍了Python中JWT Token的原理和应用,包括JWT的组成部分以及如何在Flask后端实现登录过程中生成和验证Token的步骤。通过封装静态方法在登录视图中生成Token,并阐述了Token的会话保持流程。
1713

被折叠的 条评论
为什么被折叠?



