程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 Flask_jwt_extended大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 Flask_jwt_extended?

开发过程中遇到使用 Flask_jwt_extended的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 Flask_jwt_extended的解决方法建议,希望对你解决使用 Flask_jwt_extended有所启发或帮助; @H_404_0@我是烧瓶新手。我试图将刷新令牌签名密钥设置为用户散列密码。我只希望刷新令牌签名密钥包含用户散列密码而不是访问令牌。我浏览了flask_jwt_extended 文档并遇到了encode_key_loader 方法here。 但是,我不确定如何更改函数返回的令牌类型的基数。这是我目前所拥有的。

@jwt.encode_key_loader
def my_key_loader(IDentity):
     hash = fetch_user_password(IDentity)
     return "somerandomsecretkey" + hash
  
@H_404_0@我只需要弄清楚生成的令牌的类型,然后我就可以返回适当的密钥。

解决方法

这有点笨拙,但您可以通过类似(未经测试)之类的方法完成此操作:

@jwt.user_identity_loader
def user_identity_lookup(identity):
    return identitY['user'].id

@jwt.encode_key_loader
def custom_encode_key(identity):
    secret = "<YOUR_NORMAL_JWT_ENCODE_KEY>"
    if identitY['token_type'] == "access":
        return secret
    else:
        return secret + identitY['user'].hashed_password

@jwt.decode_key_loader
def custom_encode_key(jwt_headers,jwt_payload):
    secret = "<YOUR_NORMAL_JWT_ENCODE_KEY>"
    if jwt_payload['type'] == "access":
        return secret
    else:
        user = User.query.filter_by(id=jwt_payload["sub"]).one()
        return secret + user.hashed_password

@app.route("/login",methods=["POST"])
def login():
    user = User.query.filter_by(username='example').one()
    access_token = create_access_token({'user': user,'token_type': 'access'})
    refresh_token = create_access_token({'user': user,'token_type': 'refresh'})
    return jsonify(access_token=access_token,refresh_token=refresh_token)

您还可以使用 Flask.g 对象来存储您在全局变量中创建的令牌类型,但我认为这可能比上述解决方案更糟糕。

大佬总结

以上是大佬教程为你收集整理的使用 Flask_jwt_extended全部内容,希望文章能够帮你解决使用 Flask_jwt_extended所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:使用