3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
經(jīng)過(guò)一段時(shí)間的調(diào)試器,我終于解決了這個(gè)問(wèn)題。
關(guān)鍵問(wèn)題是我試圖_id將MongoDB集合中的參數(shù)用作用戶(hù)ID。我沒(méi)有意識(shí)到_id參數(shù)是一種ObjectID類(lèi)型,而不是我需要的字符串或unicode。
def find_by_username(username):
try:
data = app.mongo.db.users.find_one_or_404({'username': username})
user = User(unicode(data['_id']), data['username'], data['password'])
return user
except HTTPException:
return None
def find_by_id(userid):
try:
data = app.mongo.db.users.find_one_or_404({'_id': ObjectId(userid)})
user = User(unicode(data['_id']), data['username'], data['password'])
return user
修改兩個(gè)函數(shù)適當(dāng)?shù)匦迯?fù)了此錯(cuò)誤。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您已驗(yàn)證它不是您的login_user
功能,那么就離開(kāi)您的find_by_id
功能。
的源代碼為user_loader
:
您設(shè)置的函數(shù)應(yīng)帶有用戶(hù)ID(a
unicode
)并返回用戶(hù)對(duì)象,或者None
如果用戶(hù)不存在。
您的find_by_id
功能使用find_one_or_404
會(huì)引起注意。我將對(duì)該函數(shù)添加一些額外的調(diào)試,添加一些打印信息或進(jìn)行日志記錄,以顯示使用正確的unicode id調(diào)用了該函數(shù),并且該函數(shù)返回了一個(gè)User
對(duì)象或None
。
希望這可以使您更進(jìn)一步地縮小問(wèn)題的范圍。
添加回答
舉報(bào)