我正在使用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)函数获取单个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