2014-04-29 159 views
2

我有一個寫在Flask的Web服務。用戶A使用一些用戶名登錄到服務。我希望用戶B無法使用相同的用戶名登錄,直到用戶A的會話過期。換句話說,我想禁用每個用戶同時登錄。我該怎麼做Flask-Login禁止同時登錄從Flask登錄的多個不同地方登錄

+0

當用戶A登錄時,保持在服務器端的信息(數據庫,文件等),然後經常檢查從服務器端的這些信息洛之前,如果用戶已經登錄。 – codegeek

+0

你知道這個實現的地方的例子嗎?我明白了,但我想確保我可以正確地做到這一點 – themantalope

+0

有人能夠解決這個問題嗎? –

回答

2

您需要做的是在數據庫的用戶模型中存儲某種會話令牌。

class User(db.Model): 
    .... 
    session_token = db.Column(db.String(40), index=True) 

當用戶登錄時,會生成會話令牌並將其保存到數據庫中。

更新您的函數以返回會話令牌而不是用戶標識。

def get_id(self):               
    return str(self.session_token) 

在你user_loader回調您查找基於令牌的用戶:

@lm.user_loader                 
def load_user(session_token):                               
    return User.query.filter_by(session_token=session_token).first() 

採用這種設置,令牌將在每次登錄時,它會自動失效前幾屆會議進行更新。

Documentation