簡體   English   中英

如何在 flask-login 中跟蹤當前用戶?

[英]How to track the current user in flask-login?

我正在嘗試從 flask-login 中使用我視圖中的當前用戶。 所以我試着g object

我正在將flask.ext.login.current_user分配給 g object

@pot.before_request
def load_users():
   g.user = current_user.username

如果用戶是正確的,它就可以工作。 但是當我使用錯誤的憑據注冊或登錄時,我收到此錯誤

AttributeError: 'AnonymousUserMixin' object has no attribute 'username'

請指教我哪里錯了...

感謝您的答案@Joe和@pjnola,因為大家都建議我提到flask-login docs

我發現我們可以自定義匿名用戶類,所以我根據我的要求進行了自定義,

Anonymous class

#!/usr/bin/python
#flask-login anonymous user class
from flask.ext.login import AnonymousUserMixin
class Anonymous(AnonymousUserMixin):
  def __init__(self):
    self.username = 'Guest'

然后將此類添加到anonymous_user

login_manager.anonymous_user = Anonymous

從這里它可以獲取用戶名,如果它是匿名請求。

好吧,錯誤信息說明了一切。 沒有登錄用戶,因此current_user返回AnonymousUserMixin AnonymousUserMixin實現了此處描述的接口: http//flask-login.readthedocs.org/en/latest/#your-user-class (不包含username屬性)。 嘗試這樣的事情:

@pot.before_request
def load_users():
    if current_user.is_authenticated():
        g.user = current_user.get_id() # return username in get_id()
    else:
        g.user = None # or 'some fake value', whatever

顯然,你的其余代碼必須處理g.user不會引用真實用戶的可能性。

AnonymousUserMixin沒有用戶名屬性。 您需要覆蓋該對象並調用mixin。 看一下LoginManager.anonymous_user這是一個在沒有用戶登錄時使用的對象。

您還需要從某個地方獲取用戶。 將用戶名存儲在g是沒有意義的,因為您可以使用current_user.username。

如果你想獲得用戶名,你也需要

if current_user.is_authenticated():
    g.user = current_user.username

這將要求用戶對象具有名為username的屬性。 有很多方法可以自定義Flask-Logins的使用方法

我建議重新閱讀文檔並查看源代碼:

https://github.com/maxcountryman/flask-login/blob/master/flask_login.py

為了查找是否有登錄 session,我們可以執行以下操作:(我已經完成了所有解決方案並注意到當我使用以下語句時它失敗了。)

if current_user.is_authenticated():
    g.user = current_user.username

正確的做法是:

if current_user.is_authenticated:
    g.user = current_user.username

然后它工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM