亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

flask登錄時出錯

flask登錄時出錯

UYOU 2021-03-31 11:15:28
我在使用Flask-Login框架進行身份驗證時遇到困難。我已盡可能詳盡地瀏覽了文檔,但顯然我遺漏了一些明顯的內容。class User():    def __init__(self, userid=None, username=None, password=None):        self.userid = userid        self.username = username        self.password = password    def is_authenticated(self):        return True    def is_active(self):        return True    def is_anonymous(self):        return False    def get_id(self):        return unicode(self.userid)    def __repr__(self):        return '<User %r>' % self.usernamedef find_by_username(username):    try:        data = app.mongo.db.users.find_one_or_404({'username': username})        user = User()        user.userid = data['_id']        user.username = data['username']        user.password = data['password']        return user    except HTTPException:        return Nonedef find_by_id(userid):    try:        data = app.mongo.db.users.find_one_or_404({'_id': userid})        user = User(data['_id'], data['username'], data['password'])        return user    except HTTPException:        return None上面是我的User類,位于 users/models.pylogin_manager = LoginManager()login_manager.init_app(app)login_manager.login_view = 'users.login'@login_manager.user_loaderdef load_user(userid):return find_by_id(userid)上面是我的用戶加載器。顯然有錯誤消息,但是當嘗試訪問任何用修飾的視圖時@login_required,它會將我重定向到登錄表單。據我所知,該login_user函數實際上并不起作用,盡管它True在我調用它時返回。任何建議表示贊賞。
查看完整描述

3 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

經過一段時間的調試器,我終于解決了這個問題。


關鍵問題是我試圖_id將MongoDB集合中的參數用作用戶ID。我沒有意識到_id參數是一種ObjectID類型,而不是我需要的字符串或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

修改兩個函數適當地修復了此錯誤。


查看完整回答
反對 回復 2021-04-01
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

如果您已驗證它不是您的login_user功能,那么就離開您的find_by_id功能。

的源代碼為user_loader

您設置的函數應帶有用戶ID(a unicode)并返回用戶對象,或者None如果用戶不存在。

您的find_by_id功能使用find_one_or_404會引起注意。我將對該函數添加一些額外的調試,添加一些打印信息或進行日志記錄,以顯示使用正確的unicode id調用了該函數,并且該函數返回了一個User對象或None。

希望這可以使您更進一步地縮小問題的范圍。


查看完整回答
反對 回復 2021-04-01
  • 3 回答
  • 0 關注
  • 247 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號