是否可以通过代码更改_default_jwt_payload_handler(identity)?

时间:2019-05-20 12:10:13

标签: flask identity flask-jwt

我在应用程序中使用Flask-JWT时遇到问题,我正在使用像这样的身份验证和身份:

def authenticate(username, password):
  session = db.Session()
  user = session.query(db.Operators).filter_by(username= username).first()
  if user and bcrypt.check_password_hash(user.password, password):
    return user

def identity(payload):
  user_id = payload['identity']
  session = db.Session()
  return session.query(db.Operators).filter_by(idOperator= user_id)

但是出现错误是因为我的数据库表中没有id字段,因为我有idOperator

如何解决此问题? _default_jwt_payload_handler(identity)函数去寻找一个ID字段,如何在不更改flask-jwt的init.py的情况下将该自动id字段更改为一个IdOperator?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用jwt_payload_handler装饰器来指定自己的有效负载处理程序。

例如,模仿默认行为,而使用idOperator可能看起来像这样:

jwt = JWT(app, authenticate, identity)

@jwt.jwt_payload_handler
def make_payload(identity):
    iat = datetime.utcnow()
    exp = iat + current_app.config.get('JWT_EXPIRATION_DELTA')
    nbf = iat + current_app.config.get('JWT_NOT_BEFORE_DELTA')
    identity = getattr(identity, 'idOperator') or identity['idOperator']
    return {'exp': exp, 'iat': iat, 'nbf': nbf, 'identity': identity}

使用哪个:

from datetime import datetime
from flask import current_app

这是the documentations规范。

答案 1 :(得分:0)

您可能要考虑使用flask-jwt-extended。 Flask-JWT已被废弃多年,而flask-jwt-extended仍在积极维护且易于定制:https://flask-jwt-extended.readthedocs.io/en/latest/basic_usage.html