AttributeError:'BaseQuerySet'对象没有属性'is_authenticated'

问题描述 投票:0回答:2

我正在使用flask-login和MongoDB作为数据库来存储用户配置文件。

[在检查用户的登录功能是否通过身份验证时:

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

我遇到以下错误:

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

我的用户对象正在从flask-login扩展UserMixin。

任何想法我可能怎么了?

mongoengine flask-login flask-mongoengine
2个回答
1
投票

确定,我找到了它-在我的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()

0
投票

如您在回答中所说,MongoEngine的接口在查询中需要id而不是_id。但是,如果检查对象表示,文档的ID仍存储在._id变量中。

[此外,您不需要使用ObjectId(the_id)将the_id转换为ObjectId(),也可以使用User.objects.get(id = the_id)函数获取单个Document而不是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
© www.soinside.com 2019 - 2024. All rights reserved.