Как перейти с использования Flask-JWT на PyJWT в моем приложении? - PullRequest
0 голосов
/ 23 мая 2018

Я хочу отказаться от использования Flask-JWT, поскольку он больше не обновляется.Моя проблема в том, что я не уверен, как достичь некоторых функций, которые мне дала Flask-JWT.Например:

jwt = JWT(app, verify, identify)

С Flask-JWT я мог передать приложение фляги, метод аутентификации и функцию identify, которая выполняет следующие действия:

def identify(payload):
    user_id = payload['identity']
    return {"user_id": user_id}

Теперь моя главная проблема заключается в том, что я не до конца понимаю, что делает декоратор @jwt_required() и как я могу воспроизвести его с помощью PyJWT.Так что, если бы у меня была следующая функция:

class PrivateResource(Resource):
    @jwt_required()

    def get(self):
        return {"badge_number": 445566}

Как я мог сделать ту же функцию, что и @jwt_required() при использовании PyJWT?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Возможно, проверьте колбу JWT продлен.Это улучшенное расширение jwt для колб (IMO), которое все еще активно поддерживается.http://flask -jwt-extended.readthedocs.io / ен / последний /

0 голосов
/ 23 мая 2018

Похоже, что он выполняет типичную проверку существования самого токена.Вы могли бы легко изменить это, вызывая токен PYJWT.

def _jwt_required(realm):
    """Does the actual work of verifying the JWT data in the current request.
    This is done automatically for you by `jwt_required()` but you could call it manually.
    Doing so would be useful in the context of optional JWT access in your APIs.
    :param realm: an optional realm
    """
    token = _jwt.request_callback()

    if token is None:
        raise JWTError('Authorization Required', 'Request does not contain an access token',
                       headers={'WWW-Authenticate': 'JWT realm="%s"' % realm})

    try:
        payload = _jwt.jwt_decode_callback(token)
    except jwt.InvalidTokenError as e:
        raise JWTError('Invalid token', str(e))

    _request_ctx_stack.top.current_identity = identity = _jwt.identity_callback(payload)

    if identity is None:
        raise JWTError('Invalid JWT', 'User does not exist')


def jwt_required(realm=None):
    """View decorator that requires a valid JWT token to be present in the request
    :param realm: an optional realm
    """
    def wrapper(fn):
        @wraps(fn)
        def decorator(*args, **kwargs):
            _jwt_required(realm or current_app.config['JWT_DEFAULT_REALM'])
            return fn(*args, **kwargs)
        return decorator
    return wrapper
...