AttributeError: у объекта 'BaseQuerySet' нет атрибута 'is_authenticated' - PullRequest
0 голосов
/ 27 октября 2019

Я использую Flask-Login и MongoDB в качестве базы данных для хранения профилей пользователей.

При проверке подлинности пользователя в моей функции входа в систему:

@bp.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('routes.index')) 

I'mполучая следующую ошибку:

AttributeError: 'BaseQuerySet' object has no attribute 'is_authenticated'

Мой объект User расширяет UserMixin из-за входа в колбу.

Есть идеи, что может быть не так?

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Как вы сказали в своем ответе, для интерфейса MongoEngine требуется id вместо _id в запросах. Однако, если вы проверяете представление объекта, идентификатор документа по-прежнему сохраняется в переменной ._id.

Также вам не нужно преобразовывать the_id в ObjectId (), используя ObjectId (the_id), иВы также можете использовать функцию User.objects.get (id = the_id), чтобы получить один документ вместо User.objects (id = the_id) .first (), как в:

@login.user_loader  
def load_user(user_id): 
    try: 
        return User.objects.get(id=user_id) 
    except Exception as e: 
        print(e)
        raise
1 голос
/ 27 октября 2019

ОК, я нашел это - в своей функции user_loader я сделал что-то вроде этого:

@login.user_loader
def load_user(id):
    return User.objects(_id=ObjectId(id))

, тогда как правильный способ получить один результат (не всю коллекцию), используя mongoengine (который, очевидно, переводит _id в id), было бы это:

@login.user_loader
def load_user(id):
    return User.objects(id=ObjectId(id)).first()
...