1

我在我的应用程序中使用 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)

但是我收到一个错误,因为我的 db 表中没有 id 字段,因为我有一个 idOperator

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

谢谢

4

2 回答 2

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

这是文档规范。

于 2019-07-02T07:14:49.093 回答
0

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

于 2019-07-02T14:10:22.950 回答