AttributeError:“ BaseQuerySet”对象没有属性“ is_authenticated”

时间:2019-10-27 17:36:02

标签: mongoengine flask-login flask-mongoengine

我正在使用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'

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

你知道我怎么了吗?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

正如您在回答中所说,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