flask 实现token生成以及携带token请求接口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、Flask-JWT-Extended是什么?

示例:flask服务中使用生成token验证,携带token请求接口;设置token过期时间等.

二、使用步骤

1.引入库

pip install flask-jwt-extended

代码如下(示例):

from flask import Flask, request, jsonify
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity,JWTManager,create_refresh_token
from flask import Flask, request, Blueprint
from datetime import timedelta
import json

# 安装 token 设置登录token验证
# pip install flask-jwt-extended


user_blueprint = Blueprint('user_blueprint', __name__)


@user_blueprint.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)

    if username != 'admin' or password != 'admin':
        return jsonify({
   "msg": "Bad username or password",'code':401}), 401

    access_token = create_access_token(identity=username)
    refresh_token = create_refresh_token(identity=username)

    rest = {
   
        'access_token': f"Bearer {
     access_token}",
        'refresh_token': f"Bearer {
     refresh_token}",
        'code': 200
    }
    # return jsonify(access_token=access_token), 200
    # return jsonify(rest)
    return json.dumps(rest, ensure_ascii=False)


@user_blueprint.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    current_user = get_jwt_identity()
    print(current_user)
    # return jsonify({'msg': 'ok'}), 200
    return jsonify({
   'msg': 'ok'})


# 使用刷新JWT来获取普通JWT  前提是已经调用了 /login 接口 携带 refresh_token请求该接口
@user_blueprint.route("/refresh", methods=["POST"])
@jwt_required(refresh=True)
def refresh():
    identity = get_jwt_identity()
    access_token = create_access_token(identity=identity)
    rest = {
   
        'access_token': f"Bearer {
     access_token}",
        'code': 200
    }
    return jsonify(rest)


def create_app():
    app = Flask(__name__)

    app.secret_key = 'ChangeMe!'
    # app.config['JWT_SECRET_KEY'] = 'my_secret_key'
    app.config['JWT_BLACKLIST_ENABLED'] = True
    app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access']
    # 设置普通JWT过期时间
    app.config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(seconds=30)
    # 设置刷新JWT过期时间
    app.config["JWT_REFRESH_TOKEN_EXPIRES"] = timedelta(days=30)
    jwt = JWTManager(app)
    jwt.init_app(app)
    app.register_blueprint(user_blueprint)
    return app


app = create_app()

if __name__ == '__main__':
    # app.run()
    app.run(debug=True, port='8888')


2.请求验证

代码如下(示例):

import requests
import json


url = 'http://127.0.0.1:8888/login'
data = {
   'username': 'admin',
        'password': 'admin'}

headers1 = {
   'Content-Type': 'application/json'}
data = json.dumps(data)
ret = requests.post(url=url, data=data, headers=headers1)
access_token = ret.json()['access_token']
refresh_token = ret.json()['refresh_token']
print(access_token)
print(refresh_token)


access_token = 'Bearer vvv'
refresh_token = 'Bearer xxx'

# ==============以下验证token
url2 = 'http://127.0.0.1:8888/protected'
token = access_token
params = {
   }
headers2 = {
   
        # 'Content-Type': 'application/json',
        'Authorization': token}
ret2 = requests.get(url=url2,headers=headers2,params=params)
print(ret2.json())

# ==============以下刷新token

# url3 = 'http://127.0.0.1:8888/refresh'
# token = refresh_token
# headers2 = {
   
#         # 'Content-Type': 'application/json',
#         'Authorization': token}
# ret3 = requests.post(url=url3,headers=headers2)
# print(ret3.json()['access_token'])

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

相关推荐

  1. flask 实现token生成以及携带token请求接口

    2024-01-26 09:00:03       49 阅读
  2. 基于token进行登录,每次请求携带token

    2024-01-26 09:00:03       33 阅读
  3. flask生成token,校验tokentoken装饰器

    2024-01-26 09:00:03       66 阅读
  4. Jwt生成token以及解析token

    2024-01-26 09:00:03       48 阅读
  5. JWT+Redis 实现接口 Token 校验

    2024-01-26 09:00:03       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 09:00:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 09:00:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 09:00:03       87 阅读
  4. Python语言-面向对象

    2024-01-26 09:00:03       96 阅读

热门阅读

  1. Android logcat日志分析

    2024-01-26 09:00:03       38 阅读
  2. ES6中数组新增了哪些扩展?

    2024-01-26 09:00:03       51 阅读
  3. coding推送代码Jenkins自动构建部署

    2024-01-26 09:00:03       49 阅读
  4. 第10章 异常与断言

    2024-01-26 09:00:03       47 阅读
  5. go-zero 全局异常处理-全局中间件

    2024-01-26 09:00:03       48 阅读
  6. SpringMVC-文件上传与下载

    2024-01-26 09:00:03       56 阅读
  7. NC6外部交换平台新增单据接口开发说明

    2024-01-26 09:00:03       56 阅读
  8. 如何利用chatgpt形式检索elk智能获取日志浅谈

    2024-01-26 09:00:03       49 阅读
  9. Linux内核--文件系统(三)文件系统原理架构介绍

    2024-01-26 09:00:03       55 阅读