[英]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.