AttributeError: 'BaseQuerySet' object has no attribute 'is_authenticated'
AttributeError: 'BaseQuerySet' object has no attribute 'is_authenticated'
我正在使用 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。
知道我哪里错了吗?
好的,我找到了 - 在我的 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()
正如您在回答中所说,MongoEngine
的接口在查询中需要 id
而不是 _id
。但是,如果您检查对象表示,文档的 ID 仍存储在 ._id
变量中。
此外,您不需要使用 ObjectId(the_id) 将 the_id 转换为 ObjectId(),您也可以使用 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
我正在使用 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。
知道我哪里错了吗?
好的,我找到了 - 在我的 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()
正如您在回答中所说,MongoEngine
的接口在查询中需要 id
而不是 _id
。但是,如果您检查对象表示,文档的 ID 仍存储在 ._id
变量中。
此外,您不需要使用 ObjectId(the_id) 将 the_id 转换为 ObjectId(),您也可以使用 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