python jwt token登入 介绍及生成

本文介绍了Python中JWT Token的原理和应用,包括JWT的组成部分以及如何在Flask后端实现登录过程中生成和验证Token的步骤。通过封装静态方法在登录视图中生成Token,并阐述了Token的会话保持流程。
部署运行你感兴趣的模型镜像


前言

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,完成用户的身份认证。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值