Flask JWT Extended вернул идентификатор в качестве идентификатора вместо адреса электронной почты - PullRequest
0 голосов
/ 11 июля 2020

Мое приложение Flask, которое я сделал, использует flask-jwt-extended для аутентификации JWT. Когда я следовал этому руководству, я добавил электронную почту в качестве отступа при создании токена доступа прямо здесь:

class ApiLogin(Resource):
    def post(self):
        data = loginParser.parse_args()
        current_user = User.find_by_email(data['email'])
        current_member = FamilyMember.find_by_email(data['email'])
        if not current_user or current_member:
            return {'message': 'User email {} doesn\'t exist'.format(data['email'])}, 403
        
        if bcrypt.check_password_hash(current_user.password if current_user else current_member.password, data['password']):
            access_token = create_access_token(identity =data['email'])
            refresh_token = create_refresh_token(identity =data['email'])
            print(get_raw_jwt())
            return {
                'message': 'Logged in as {}'.format(data['email']),
                'name': current_user.name if current_user else current_member.name,
                'access_token': access_token,
                'refresh_token': refresh_token,
                'identity': get_raw_jwt()
            }
        else:
            return {'message': 'Wrong credentials'}, 403

Но функция get_raw_jwt() возвращает идентификатор в качестве идентификатора вместо электронной почты, например:

{'iat': 1594408603, 'nbf': 1594408603, 'jti': '1b7227e5-873e-4076-aac6-a81ec2834256', 'exp': 1597000603, 'identity': 2, 'fresh': False, 'type': 'access', 'user_claims': {}}

Как это случилось? Провел часы в поиске, но не получил аналогичного результата. Подскажите пожалуйста, в какой части я делаю ошибку

1 Ответ

0 голосов
/ 11 июля 2020

get_raw_jwt() возвращает идентификатор токена, выполняющего запрос, а не только что созданный вами токен. Ваш оператор возврата должен выглядеть так:

return {
    'message': 'Logged in as {}'.format(data['email']),
    'name': current_user.name if current_user else current_member.name,
    'access_token': access_token,
    'refresh_token': refresh_token,
    'identity': data['email'],
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...