AttibuteError: у объекта «_AppCtxGlobals» нет атрибута «пользователь» - PullRequest
0 голосов
/ 25 апреля 2020

Чтобы установить контекст, я создаю API через Flask. Для аутентификации пользователей я использую flask -HTTPAuth . Как часть доступа к защищенным входом ресурсам, я определил мой verify_password обратный вызов в auth.py. Если предоставленные учетные данные пользователя имеют значение True, пользователь присоединен к объекту g.

В app.py существует маршрут /api/v1/users/token, при котором пользователю по запросу выдается токен это вошел в систему. Однако, когда я пытаюсь получить доступ к g.user в app.py, я получаю сообщение об ошибке: AttributeError: '_AppCtxGlobals' object has no attribute 'user'.

Почему не существует какого-либо существующего атрибута 'user' во время доступа к g объект в app.py?

auth.py

from flask import g
from flask_http import HTTPBasicAuth

from models import User

basic_auth = HTTPBasicAuth()

@basic_auth.verify_password
def verify_password(username, password):
    try:
        api_user = User.get(User.username == username)
    except User.DoesNotExist:
        return False
    user_verified = api_user.check_password(password)
    if user_verified:
        g.user = api_user
        return True
    return False

app.py

from flask import Flask, g, jsonify

from auth import basic_auth as auth

app = Flask(__name__)

@auth.login_required
@app.route("/api/v1/users/token")
def issue_api_token():
    token = g.user.request_token()
    return jsonify({'token': token})

1 Ответ

0 голосов
/ 27 апреля 2020

Порядок ваших декораторов неправильный, @app.route всегда должен быть первым.

@app.route("/api/v1/users/token")
@auth.login_required
def issue_api_token():
    # ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...