首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask应用程序不注册jwt.user_lookup_loader,Flask-JWT-Extended

Flask应用程序不注册jwt.user_lookup_loader,Flask-JWT-Extended
EN

Stack Overflow用户
提问于 2021-02-19 22:20:15
回答 1查看 549关注 0票数 0

我有一个有蓝图的Flask应用程序。它工作得很好,但是我决定使用flask_jwt_extended来处理令牌。文档中说我可以用jwt.user_lookup_loader修饰方法来让current_user工作。但是由于某种原因,调用current_user以一个错误结束:

代码语言:javascript
复制
You must provide a `@jwt.user_lookup_loader` callback to use this method

但它就在那里,在同样的蓝图中。还有一个用@jwt.user_identity_loader装饰的方法,它工作得很好。以下是我的代码的简化版本:

代码语言:javascript
复制
from . import rpc, jwt
from flask_jwt_extended import current_user, jwt_required

bp = Blueprint('login_bp', __name__)

@jwt.user_identity_loader
def _user_identity_lookup(user):
    return user.id

@jwt.user_lookup_loader
def _user_lookup_callback(_jwt_header, jwt_data):
    identity = jwt_data["sub"]
    user = rpc.cache_service.get_user(identity)
    if user is None:
        return None
    return UserSchema().load(user)

@jwt_required()
@bp.route("/logout", methods=['POST'])
def logout():
    rpc.cache_service.forget_user(current_user.id)
    return {"status": "OK"}

jwt是用我的应用程序初始化的JWTManager:

代码语言:javascript
复制
jwt = JWTManager()
def create_app():
    app = Flask(__name__, instance_relative_config=False)

    app.config.from_mapping(JWT_SECRET_KEY=os.environ["JWT_SECRET_KEY"])
...
    jwt.init_app(app)
...
    with app.app_context():
        from . import login_bp
        app.register_blueprint(login_bp.bp)

这段代码基本上来自文档示例:

https://flask-jwt-extended.readthedocs.io/en/stable/automatic_user_loading/

我看不出问题是什么(

指向存储库的链接:https://github.com/GreenBlackSky/COIN/blob/master/api_app/app/login_bp.py

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 22:52:26

你的装饰者的顺序错了。@bp.route()需要出现在@jwt_required()之前,否则它会在请求传入时尝试在解码请求中的logout方法之前评估JWT方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66279295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档