首页 > 其他分享 >Flask 学习-32.flask_jwt_extended 自定义装饰器

Flask 学习-32.flask_jwt_extended 自定义装饰器

时间:2022-09-01 13:35:44浏览次数:59  
标签:__ extended return 自定义 Flask jwt flask import

前言

创建自己的装饰器来扩展此扩展提供的装饰器的功能。例如,您可能想要创建自己的装饰器来验证 JWT 是否存在以及验证当前用户是否是管理员。

自定义装饰器

flask_jwt_extended.verify_jwt_in_request()可用于构建您自己的装饰器。这与 . 使用的功能相同flask_jwt_extended.jwt_required()。

官方文档示例

from functools import wraps

from flask import Flask
from flask import jsonify

from flask_jwt_extended import create_access_token
from flask_jwt_extended import get_jwt
from flask_jwt_extended import JWTManager
from flask_jwt_extended import verify_jwt_in_request

app = Flask(__name__)

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


# Here is a custom decorator that verifies the JWT is present in the request,
# as well as insuring that the JWT has a claim indicating that this user is
# an administrator
def admin_required():
    def wrapper(fn):
        @wraps(fn)
        def decorator(*args, **kwargs):
            verify_jwt_in_request()
            claims = get_jwt()
            if claims["is_administrator"]:
                return fn(*args, **kwargs)
            else:
                return jsonify(msg="Admins only!"), 403

        return decorator

    return wrapper


@app.route("/login", methods=["POST"])
def login():
    access_token = create_access_token(
        "admin_user", additional_claims={"is_administrator": True}
    )
    return jsonify(access_token=access_token)


@app.route("/protected", methods=["GET"])
@admin_required()
def protected():
    return jsonify(foo="bar")


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

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

相关文章

  • 屏幕深度 自定义深度 纹理元素
      SceneTexture节点,可以帮助我们获取很多信息,例如像素深度,法线,自定义深度,后处理输入,粗糙度,金属值等借助SceneTexture节点中的SceneDepth,我们获取到了渲染像素在屏幕......
  • Flask 学习-30.flask_jwt_extended 自定义 token 过期返回内容
    前言flask_jwt_extended插件使用,当token过期的时候,默认返回401UNAUTHORIZED{"msg":"Tokenhasexpired"}@jwt.expired_token_loader设置一个回调函数,以便在过期时返......
  • 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自定义属性这篇文章最初发表在我们自己的博客网站上一探究竟看到更多这样的帖子!在这篇文章中语境真正的区别不可知论方法最后的想法语境在......