首页 > 其他分享 >Flask 学习-30.flask_jwt_extended 自定义 token 过期返回内容

Flask 学习-30.flask_jwt_extended 自定义 token 过期返回内容

时间:2022-09-01 11:23:13浏览次数:60  
标签:__ extended return 自定义 Flask jwt flask token expired

前言

flask_jwt_extended 插件使用,当token过期的时候,默认返回401 UNAUTHORIZED {"msg": "Token has expired"}

@jwt.expired_token_loader

设置一个回调函数,以便在过期时返回自定义响应令牌尝试访问受保护的路由。这个特定的回调函数
将jwt_header和jwt_payload作为参数,并且必须返回 Flask 响应。查看API文档以查看其他回调函数所需的参数和返回值。

官方文档使用示例

from flask import Flask
from flask import jsonify

from flask_jwt_extended import create_access_token
from flask_jwt_extended import jwt_required
from flask_jwt_extended import JWTManager

app = Flask(__name__)

app.config["JWT_SECRET_KEY"] = "super-secret"  # Change this!
jwt = JWTManager(app)


# Set a callback function to return a custom response whenever an expired
# token attempts to access a protected route. This particular callback function
# takes the jwt_header and jwt_payload as arguments, and must return a Flask
# response. Check the API documentation to see the required argument and return
# values for other callback functions.
@jwt.expired_token_loader
def my_expired_token_callback(jwt_header, jwt_payload):
    return jsonify(code="dave", err="I can't let you do that"), 401


@app.route("/login", methods=["POST"])
def login():
    access_token = create_access_token("example_user")
    return jsonify(access_token=access_token)


@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
    return jsonify(hello="world")


if __name__ == "__main__":
    app.run()

使用示例

token过期时,默认返回{"msg": "Token has expired"}, 使用@jwt.expired_token_loader 自定义token过期返回内容

@jwt.expired_token_loader
def my_expired_token_callback(jwt_header, jwt_payload):
    """返回 flask Response 格式"""
    return jsonify(code="401", err="token 已过期"), 401

重新访问带上一个过期token时

GET http://127.0.0.1:5000/api/v1/userinfo HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1:5000
Content-Type: application/json
Content-Length: 0
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY2MTk1NzA2NiwianRpIjoiNmY4NWRlNGEtZThhNS00ZGY2LWJiMjktMmM4NWQyMWE3ZjU3IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6InRlc3Q1IiwibmJmIjoxNjYxOTU3MDY2LCJleHAiOjE2NjE5NjA2NjZ9.GKsz2nJUziXLWfYrzidX7Fopw5tlycT0lZBKlvnpt8s

HTTP/1.1 401 UNAUTHORIZED
Server: Werkzeug/2.2.2 Python/3.8.5
Date: Thu, 01 Sep 2022 03:11:58 GMT
Content-Type: application/json
Content-Length: 48
Connection: close

{
  "code": "401",
  "err": "token 已过期"
}

此时返回的内容就是我们自定义的

标签:__,extended,return,自定义,Flask,jwt,flask,token,expired
From: https://www.cnblogs.com/yoyoketang/p/16645873.html

相关文章

  • Flask 学习-28.flask_jwt_extended插件 JWT 中存储额外数据(additional_claims)
    前言在访问令牌中存储其他信息,以后可以在受保护的视图中访问这些信息。这可以使用additional_claims带有create_access_token()orcreate_refresh_token()函数的参数来完......
  • Flask 学习-27.flask_jwt_extended插件学习current_user的使用
    前言flask_jwt_extended最基本的使用只需要掌握三个函数:create_access_token()用来创建Token令牌get_jwt_identity()用来根据令牌取得之前的identity信息jwt_r......
  • 为自定义域名的网站获取安全文件 (群晖7.X版)
    在上篇介绍中我们提到,虽然此时位于群晖NAS上的网站已经成功配置了自定义域名,但这个域名还只是http前缀,即没有配置现在流行的https协议,因此在访客浏览时,网站会被定义为不安......
  • 创建 Flask Web 应用程序简介
    创建FlaskWeb应用程序简介安装Flask和开发原型FlaskWeb应用程序的方法Photoby邮件黑猩猩on不飞溅Flask是一个PythonWeb框架。它是一个流行的轻量级......
  • idea插件开发笔记——右键菜单添加自定义模板
    再resources文件下创建fileTemplates/internal文件夹(必须是这个)添加模板文件 mapper.tsx.ft<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//......
  • 构建自定义镜像并优化dockerfile文件
    目录一.系统环境二.前言三.镜像构建步骤四.dockerfile文件常用指令4.1dockerfile文件常用指令4.2RUN、CMD、ENTRYPOINT的区别五.构建centos镜像5.1构建一个可以使用ifco......
  • 反应自定义钩子
    反应自定义钩子如果你正在看这篇文章,我希望你一定熟悉ReactHooks。在本文中,我们将为我们的应用程序创建一个自定义挂钩。首先,为什么我们需要在应用程序中创建自定义挂......
  • Sass 变量与 CSS 自定义属性
    Sass变量与CSS自定义属性这篇文章最初发表在我们自己的博客网站上一探究竟看到更多这样的帖子!在这篇文章中语境真正的区别不可知论方法最后的想法语境在......
  • Python根据类中属性自定义排序的方法
    如果以创建的对象作为列表中的元素,那么对列表进行排序时可使用sort()函数或sorted()函数,但要注意的是:①当排序对象为列表的时候两者适合的场景不同②sorted()函数会返......
  • Flask 学习-26.JWT(JSON Web Token)生成Token
    前言JSONWebToken(JWT)是一个非常轻巧的规范。jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目。python中pyjwt是一个独立的包,flask的插件集成了该功能可......