Можно ли изменить _default_jwt_payload_handler (идентичность) по коду? - PullRequest
1 голос
/ 20 мая 2019

У меня проблемы с использованием 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. Как я могу изменить это поле автоматического идентификатора на IdOperator, не изменяя init.py из flask-jwt?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Возможно, вы захотите вместо этого рассмотреть flask-jwt-extended.Flask-JWT уже давно не используется, в то время как flask-jwt-extended все еще активно поддерживается и его гораздо легче настроить: https://flask -jwt-extended.readthedocs.io / en / latest / basic_usage.html

0 голосов
/ 02 июля 2019

Вы можете использовать декоратор 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

Вот документация спецификация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...