我正在使用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。
你知道我怎么了吗?
答案 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